在做this code-along时,我试图通过一个简单的例子来验证我对SwiftData的了解。
这是可行的:
import SwiftUI
@main
struct WWPDApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
// this makes modelContext available in the app
.modelContainer(for: Memo.self)
}
}
struct ContentView: View {
// for getting swiftdata
@Query private var memos: [Memo]
// for setting swiftdata
@Environment(\.modelContext) var modelContext
var body: some View {
VStack {
Button("ADD MEMO") {
modelContext.insert(Memo(name: "new memo"))
}
List(memos) {memo in
Text(memo.name)
}
}
.padding()
}
}
// Putting "@Model" here makes this class work with swift data
@Model
final class Memo {
var id: UUID
var name: String
init(id: UUID = UUID(), name: String) {
self.id = id
self.name = name
}
}
字符串
这会起作用,并验证我们是否可以添加新对象并保存它们。
但是,我想验证和理解编辑/绑定方面。
我知道modelContext只用于插入一个新的对象。对于编辑一个现有的对象,我们将依赖于与查询数组(?)中包含的对象的双向绑定。
所以我试了一下:
struct ContentView: View {
// for getting swiftdata
@Query private var memos: [Memo]
// for setting swiftdata
@Environment(\.modelContext) var modelContext
var body: some View {
// need to put some kind of @Bindable thingy here
VStack {
Button("ADD MEMO") {
modelContext.insert(Memo(name: "new memo"))
}
List(memos) {memo in
TextField("this doesn't work", text: memo.$name)
}
}
.padding()
}
}
型
1条答案
按热度按时间xiozqbni1#
@Model final class Memo ...
通过添加对Observable
协议的一致性来实现类的更改跟踪。因此,当您想要为memo.name
绑定时,您可以使用@Bindable
,如示例代码所示。字符串