mit verschachtelten Structs Beispiel-Daten bauen (inkl. Array)

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

  • mit verschachtelten Structs Beispiel-Daten bauen (inkl. Array)

    Hallo Zusammen,

    ich wollte mir einfach mal eben mit Structs ein paar Beispiel-Daten bauen und scheitere daran, wie ich verschachtelte Structs baue und dabei die Verschachtelung auch noch als Array funktioniert ... ja ich baue quasi ein CoreData Objekt auf.


    Quellcode

    1. // um die Shops geht es ...
    2. struct Shop {
    3. var name: String
    4. var city: String?
    5. var openTimes: [OpenTimes]?
    6. }
    7. // .. die haben an verschiedenen Wochentagen unterschiedliche Öffnungszeiten
    8. struct OpenTimes {
    9. var weekOfDay: Int
    10. var open1: String
    11. var close1: String
    12. var open2: String // wird nur genutzt, wenn am selben Tag wieder eröffnet wird (Pause zu Ende)
    13. var close2: String
    14. }
    15. // beim Anlegen eines Shops, hab ich vielleicht noch keine Öffnungszeiten hinterlegt:
    16. var firstShop = Shop.init(name: "Stichweh", city: "Hannover", openTimes:nil)
    17. print(firstShop)
    18. // jetzt mal die unterschiedlichen Öffnungszeiten exemplarisch erfassen
    19. let monday = OpenTimes.init(weekOfDay: 1, open1: "10:00", open2: "", close1: "20:00", close2: "")
    20. let tuesday = OpenTimes.init(weekOfDay: 2, open1: "08:00", open2: "15:00", close1: "13:00", close2: "20:00")
    21. print(monday)
    22. // und das jetzt mal einem Shop hinzufügen
    23. // TODO: das klappt nicht: immer nil! wegen dem nil beim Anlegen? Aber wie lösen...
    24. firstShop.openTimes?.insert(monday, atIndex: (firstShop.openTimes?.count)!)
    25. print(firstShop)
    Alles anzeigen
    Danke für Eure Hilfe.

    Gruß
    iet
    ----
    Macht's gut und danke für den Fisch
  • firstShop.openTimes bleibt immer "nil". Schon bei der Zuweisung zeigt mir playground ein blödes "nil" an.

    .append oder .insert ändert nichts, ausser natürlich weniger Code. Hatte ich vorher auch stehen, aber da es nicht ging war ich verzweifelt genug es mit .insert zu probieren ;)

    Quellcode

    1. firstShop.openTimes?.append(monday)
    ... dachte ja nur, dass ich mal schnell ein paar Testdaten zentral einbaue und mich erst um views und controller kümmere. lieber doch gleich core data und eine schnelle insert-view bauen? wie machst du das mit Testdaten, die eine 1:n Beziehung untereinander haben.
    ----
    Macht's gut und danke für den Fisch
  • ichessetoast schrieb:

    firstShop.openTimes bleibt immer "nil". Schon bei der Zuweisung zeigt mir playground ein blödes "nil" an.
    Vielleicht liegt es daran, dass du das Array nicht initialisierst. ;)

    ichessetoast schrieb:

    lieber doch gleich core data und eine schnelle insert-view bauen? wie machst du das mit Testdaten, die eine 1:n Beziehung untereinander haben.
    Wenn du sowieso CoreData verwenden willst, warum verwendest du es nicht direkt? Der Mehraufwand dürfte sich jedenfalls in Grenzen halten, und Structs kannst du später in die Tonne schmeißen.
    „Meine Komplikation hatte eine Komplikation.“
  • oh man ... das war ja zu einfach :)
    du hattest recht, die Initialisierung fehlte ( ... openTimes:[] ....) - falls es mal jmd nachbauen möchte.

    Quellcode

    1. <span class="hljs-keyword">var</span> firstShop = Shop.init(name: <span class="hljs-string">"Stichweh"</span>, city: <span class="hljs-string">"Hannover"</span>, openTimes:[])
    Vielen Dank!!!!


    Ob nun direkt mit CoreData oder erstmal einem Struct anfangen ist sicherlich eine philosophische Frage. Für ich mach mal schnell einen Prototyp fertig, wollte ich nur schnell einen struct verwenden. Und jetzt kann ich wenigstens verschachtelte mit Arrays bauen. Wieder was gelernt. Schadet also nichts.
    ----
    Macht's gut und danke für den Fisch