struct an Funktion übergeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • struct an Funktion übergeben

    Hallo zusammen,

    ich bin noch sehr neu mit Swift unterwegs und ich treffe schon auf ein Problem :(

    Ich würde gerne eine paar Standardfunktion für mich selbst entwickeln die für mich universell einsetzbar sind.

    ich würde gerne eine struct an eine Funktion übergeben z.b:

    struct Flugzeug: Identifiable , Codable {
    var id = UUID()
    var art:String = ""
    var firma:String = ""
    var gebucht:Bool = false
    }

    func save_data(Bezeichnung bezeichnung:String, *** was setze ich hier ein? *** ) {
    .
    .
    .
    .
    }

    Es ist jetzt so, dass ich die "struct" an meine Funktion übergeben will. Ich kenne aber nicht den Namen der struct, da ich die Funktion für alle meine Programme verwenden will und
    die struct einen anderen Namen und auch eine andere Struktur haben kann.

    Ich würde also gerne die "struct" als Parameter an die Funktion übergeben.

    Geht sowas überhaupt?

    Vielen Dank schonmal für die Hilfe!

    LG
    Gerry
  • Sagen wir mal, ich bin wohl zu Alt dafür, ggf könnte hier das Reflection zum Einsatz kommen. Google hilft hier weiter.

    Sonst würd ich eher ein Protokoll verwenden, welches Saveable als Requirement hat. Dieses würde dann von deiner Funktion aufgerufen.

    Abwr es ist ein großer Unterschied ob Du in einer DB oder filesystem speichern möchtest oder sonst wohin.

    Wirst wohl noch einige Herausforderungen zu meistern haben.
  • Sehe das so wie Wolf. Du könntest doch sogar einfach das Codable Protokoll, welches dein Struct ohnehin bereits entspricht, verwenden, oder? Das hängt aber stark davon ab, in welcher DB / wie du deine Daten abspeichern willst und welche Informationen oder ggf. Konvertierungsschritte erforderlich sind.

    Ich persönlich würde dir aber ehrlich gesagt empfehlen, es nicht (unnötig) zu kompliziert zu machen. Ich kenne es von mir selbst, dass man alles möglichst abstrakt, generisch & allgemeingültig (wie deine Save Funktion für alle Entities) machen will. Manchmal ist aber ein gewisser Pragmatismus auch nicht schlecht. ;) Erst mal für jede Struct eine eigene Save-Funktion machen, und dann in einem späteren Refactoring überlegen, ob eine generische Save-Funktion wirklich Sinn macht und falls ja, in welcher Form. Ich habe die Erfahrung gemacht, dass diese Vorgehensweise oft produktiver ist.
  • Vielen Dank für eure schnelle Antwort.

    @Thallius -- Ja JSON wollte ich auch zum Speichern verwenden aber innerhalb der Funktion.

    @Wolf -- Reflection schau ich mir an wenn ich etwas mehr Erfahrungen gesammelt habe. Danke für den Tip!

    @Osxer -- Ich glaube du hast recht :) ich muss ja noch viel lernen und deshalb mache ich es jetzt so einfach wie möglich.

    So wie Thallius es gesagt hat erstelle ich jetzt eine Funktion nur für meine aktuelle App und versuche nicht die Funktion universal zu machen.

    Nochmal ein großes DANKE!
  • Hi,
    bin auch noch recht neu in Swift, komme aus der .Net Welt.

    Du könntest Dir einen JsonDataManager machen und diesen generisch:

    Quellcode

    1. final class JsonDataManager<T: Codable> {
    2. func save(Bezeichnung: String, entity: T) {
    3. ...
    4. }
    5. }

    und dann dort wo du den Manager brauchst ne Instanz erstellen und deine Struct rein schmeißen:

    Quellcode

    1. private let manager = JsonDataManager<Flugzeug>()
    2. manager.save('DeineBezeichnung', 'DeineFlugzeugInstanz')