WICHTIG!!! In dem Video hatte ich nicht die aktuellste Xcode Beta installiert gehabt. In der aktuellsten Version hatte sich etwas in der Syntax geändert: Bei dem Query muss noch der Typ hingeschrieben werden: @Query(sort: \Notiz.inhalt) private var notizen: [Notiz] Bei der Delete Rule muss noch der Parameter "deleteRule" vorher angegeben werden. @Relationship(deleteRule: .cascade) var events: [Event] Oder ihr findet auch den aktuellsten Quellcode auf meinem Discord: discord.gg/cVczYJAJ2P
@goisa8653 Жыл бұрын
Super Tutorial! Versuche gerade alles nachzuprogrammieren. Bleibe aber am Type für Notizen hängen. Bekomme immer wieder Fehler.
@CodingSwiftWithNico Жыл бұрын
@@goisa8653 Danke! Was ist das denn für eine Fehlermeldung? Kannst mir auch gerne auf Discord schreiben. Link ist in der Beschreibung. Dort könntest du mir auch den Code schicken
@goisa8653 Жыл бұрын
hat sich erledigt1
@CodingSwiftWithNico Жыл бұрын
@@goisa8653 perfekt 👍
@LebenWerden7 ай бұрын
Hi, müssen RelationShips immer Arrays sein? (Min 14:10)
@CodingSwiftWithNico7 ай бұрын
Hey, ne können auch einzelne Objekte sein. Dann ist es eine 1:1 Beziehung
@LebenWerden7 ай бұрын
@@CodingSwiftWithNico Ach so! Danke.
@iceman-elektrischunterwegs30995 ай бұрын
Frage: wenn ich Relationship schreibe, wird mir in der klammer () nur ".unique." und ".init"" angeboten. Bei dir ja auch das Cascade, woran liegt das?
@LebenWerden8 ай бұрын
Hi Nico, eine Frage zur Minute 7:33. warum kann man onDelete nicht benutzen?
@CodingSwiftWithNico8 ай бұрын
Hey, du kannst auch onDelete benutzen. onDelete gibt dir aber einen IndexSet und du musst dir dann erst alle items rausholen aus der Liste mit dem IndexSet und dann löschen. Deswegen habe ich hier eine SwipeAction benutzt, wo du dann direkt das Model hast
@LebenWerden7 ай бұрын
Hallo Nico, in Min 2:10 schreibst Du var id: UUID. Wird dadurch das Notiz automatisch Identifable? Brauchen das Identifable Protokoll nicht explizit anzugeben, wenn wir var id: UUID scheiben? Ist das @Model Notiz automatisch konform zu Equatable, Hashable und Comparable?
@CodingSwiftWithNico7 ай бұрын
Hey, alle @Models sind immer automatisch Identifiable. SwiftData legt im Hintergrund immer automatisch schon eine ID an. Ich mache es oft aber immer nochmal selber, ist aber nicht notwendig
@LebenWerden7 ай бұрын
@@CodingSwiftWithNico Ist ein @Model auch Equatable, Hashable und Comparable?
@LebenWerden8 ай бұрын
Hallo Nico, eine Frage zu Min 2:35: Ich habe in meinem Code im Model ein Array mit var inhalt: [String] erstellt. Kann man das so machen? Muss man auf etwas achten?
@@CodingSwiftWithNico Habe einen eigenen Code erstellt. Was mache ich hier falsch: @Model class Notiz { var id: UUID var exerciseArray: [String] init(exerciseArray: [String]) { self.id = UUID() self.exerciseArray = exerciseArray } } struct ContentView: View { @Environment(\.modelContext) private var modelContext @State private var notiz = Notiz(exerciseArray: []) //
@CodingSwiftWithNico8 ай бұрын
Du kannst keine @State Variable wie in deinem Beispiel mit SwiftData erstellen. Du kannst sie nur zuweisen. Wie die genaue Lösung für dein Szenario ist, müsste ich wissen was du mit der @State Variable vor hast oder mehr Code sehen
@LebenWerden8 ай бұрын
@@CodingSwiftWithNico Mir geht es um folgendes: In deinem Besipiel hast du eine "leere" Variable notiz erstellt: @State var notiz = "" Was ich benötige, ist eine "leere" Variable vom meinem Typ Notiz. Wenn ich @State private var notiz: Notiz schreibe, dan kommt bezüglich Initialisierung ein Fehler. #Preview {ContentView().modelContainer(for: Notiz.self)} Hier weiß ich nicht weiter.
@CodingSwiftWithNico8 ай бұрын
Wofür brauchst du denn eine leere Variable? Du müsstest in deinem Fall dann wahrscheinlich nur ein Array erstmal nehmen. Dann befüllst du es und drückst auf einen Hinzufügen Knopf und erst dann darf das Notizen Objekt erstellt werden
@iceman-elektrischunterwegs30995 ай бұрын
Hi, wenn ich das @Query schreibe, wird mir nach "Notiz. nur Sachen wie "count" , "isEmty" vorgeschlagen, aber nicht "id", oder "inhalt" woran liegt das? das fehlt dann die Verbindung zur Class oder?
@CodingSwiftWithNico5 ай бұрын
Hey, @Query gibt dir eine Liste. Damit du auf inhalt oder id zugreifen kannst, musst du auf ein bestimmtes Element zugreifen in der Liste. z.B. indem du mit einer ForEach Schleife drüber iterierst, mit einem Index auf ein Element zugreifst notizen[0].inhalt um auf das erste Element zuzugreifen (Achtung kann abstürzen wenn die Liste leer ist) oder die Funktionen von der Liste benutzt notizen.last um das letzte Element zu bekommen. (Achtung kann auch abstürzen wenn die Liste leer ist)
@iceman-elektrischunterwegs30995 ай бұрын
@@CodingSwiftWithNico verstehe ich so halb. die Frage wäre für mich, was muss stimmmen im Code, das einem das ".inhalt" oder ".id" angezeigt wird? die "class Notiz" und ".modelcontainer(for: Notiz.self) oder noch mehr?
@CodingSwiftWithNico5 ай бұрын
Du musst von der Liste auf ein bestimmtes Element zugreifen. Aktuell ist es eine Liste, was auch eine Liste sein muss Was möchtest du denn erreichen? Alle Inhalte von den notizen anzeigen? Dann müsstest du z.B. eine ForEach Schleife nehmen
@iceman-elektrischunterwegs30995 ай бұрын
@@CodingSwiftWithNico Was ich erreichen möchte, ok sorry, ich dachte das wäre soweit klar, ich code genau die gleiche App nach, wie du im Video. Also auch mit der Foreach schleife. Nur kommt halt bei "Notiz. nicht als vorschlag "inhalt" oder "id. also wie man es in der class angegeben hat, sondern halt "count", "isEmty" und so. Ich habe wohl den Fehler gefunden, ich hatte die @state private var Notiz genannt, und die @query auch "Notiz", also beides gleich...
@LebenWerden7 ай бұрын
Hi, kann der Modifier onMove() auf Query notizen gekoppelt werden? Ich bekomme immer Fehler angezeigt. Hast Du zu onMove bei Qquery ein Video?
@CodingSwiftWithNico7 ай бұрын
Hey, onMove kann nicht auf ein Query gekoppelt werden, da es immer auf eine ForEach Schleife gekoppelt sein muss. Die ForEach Schleife kann aber ein query enthalten
@LebenWerden7 ай бұрын
@@CodingSwiftWithNico onDelete funktioniert aber.Wieso nicht onMove?
@CodingSwiftWithNico7 ай бұрын
Kannst du mir den Code mal zeigen?
@LebenWerden7 ай бұрын
@@CodingSwiftWithNico Gerne, aber ch glaube nicht, dass der Code hier reinpasst. Geht das über Discord? Hab mich eben angemeldet.
@CodingSwiftWithNico7 ай бұрын
Klar, du kannst ihn da z.B. mit der Frage in dem „Apple Chat“ posten.
@LebenWerden8 ай бұрын
Hallo Nico, ich hätte da eine Frage zu List. Kann man die Zelle einer List in Farbe darstellen? Oder den Zellenrand in Farbe?
@CodingSwiftWithNico8 ай бұрын
ja, über .listRowBackground(Color.red). Den Rand wüsste ich nicht direkt wie das geht
@LebenWerden8 ай бұрын
@@CodingSwiftWithNico Danke, werde das gleich mal ausprobieren.
@LebenWerden8 ай бұрын
Hi Nico, du hast mir bisher super geholfen. Hätte aber eine neue Frage. Ich habe in meinem Code eine weitere View erstellt. Innerhalb dieser View möchte ich auf den notizen-Speicher zugreifen. Wie macht man das?
@CodingSwiftWithNico8 ай бұрын
Hey, sehr gerne! Nur auf eine einzelne Notiz oder alle? Wenn du auf alle zugreifen möchtest, kannst du dort auch einfach das query benutzen. Wenn du mir eine einzelne Notiz haben möchtest, musst du die übergeben, ähnlich wie bei der Stelle 9:08 im Video
@LebenWerden8 ай бұрын
@@CodingSwiftWithNicoWenn in allen Views @Query private var notizen: [Notiz] @Environment(\.modelContext) private var modelContext steht, kann ich dann kann man auf notizen zugreifen? Hast Du es gemeint?
@LebenWerden8 ай бұрын
@@CodingSwiftWithNicoHat geklappt, kann auf alle notizen zugreifen. Danke Dir!
@CodingSwiftWithNico8 ай бұрын
Gerne!
@LebenWerden8 ай бұрын
Hallo Nico. Habe deinen Code erstellt, aber alles in eine Swiftdatei gepackt. Alles läuft richtig. So, habe dann copy paste gemacht um ihn in eine neue Datei zu legen. Das dann Fehlermeldungen bezüglich Mehrfachdeklaration erscheint, ist klar. Ich muss dann jede struct, class func usw. umbennen, aber das ist mühsam und nervig. Sie mit private deklarieren geht auch nicht. Branchen erstellen um hin- und her zu switchen ist ebenso nervig. Und ein komplett neues Prijekt erstellen will ich auch nicht. Hättest Du eine Idee?
@CodingSwiftWithNico8 ай бұрын
Hey, wüsste gerade auch keinen besseren Weg. Bin ich lege aber eher immer ein Test-Projekt an, wo ich Sachen ausprobiere und dann auch wieder lösche
@LebenWerden8 ай бұрын
@@CodingSwiftWithNicoSchade, dann muss halt so weiter machen.
@LebenWerden10 ай бұрын
Hallo, ab genau welchem Tag kann SwiftData benutzt werden?
@CodingSwiftWithNico10 ай бұрын
Hey, ist jetzt schon draußen mit Xcode Version 15
@PokeChucks Жыл бұрын
Leider ist die CloudKit Integration noch ziemlich buggy. Hoffe das wird schnell behoben bzw. ermöglicht.
@ybmusic786510 ай бұрын
Gutes Video, aber zu 0:50-1:00, kann ich nicht nachvollziehen. SwiftUI ist das letzte, was man lernen sollte, es ist schließlich nur das User Interface. Ein Programm kann ohne UI arbeiten, aber ein UI nicht ohne Programm. Ein Neuling sollte daher immer zuerst lernen Programme ohne UI (Terminalprogramme) zu programmieren. Kann er mit Klassen, Structs, Datenspeicherung mit SwiftData usw. umgehen, dann erst sollte er sich in das UI einlernen. Denn so entsteht eine Lernkurve.
@CodingSwiftWithNico10 ай бұрын
Danke! SwiftData macht m.M.n. nur Sinn in UIs zu benutzen. Man wird niemals ein Konsolen Programm mit SwiftData haben. Abgesehen davon zeige ich in meinem SwiftUI Tutorial zuerst wie man Swift programmiert und nicht SwiftUI
@LebenWerden8 ай бұрын
Hi Nico, mein Project hat ein struct, die ein Bindable Property Wrapper notiz und ein Integer linkNumber. Ich möchte notiz und linkNumber in die Preview schreiben. Aber ich weiß nicht wie. Kommt da irgendwas rein mit .contant oder so? #Preview { ExerciseView() } struct ExerciseView: View { @Bindable var notiz: Notiz let linkNumber: Int // ... }
@CodingSwiftWithNico8 ай бұрын
Hey, du benötigst dafür einen PreviewWrapper. Du kannst dafür folgenden Code schreiben: struct SwiftDataPreviewWrapper: View { @ViewBuilder var view: Content let modelContainer: ModelContainer init(of type: S.Type, view: () -> Content) where S : PersistentModel { do { modelContainer = try ModelContainer(for: type, configurations: .init(isStoredInMemoryOnly: true)) } catch { fatalError("Could not initialize ModelContainer") } self.view = view() } var body: some View { view .modelContainer(modelContainer) } } #Preview { SwiftDataPreviewWrapper(of: Notiz.self) { ContentView(notiz: Notiz(name: "Test")) } }