Pay*_*DEV 2 swift swift-data swiftui
我正在尝试更新 SwiftData 中的数据。然而,该文档实际上只是:
func update(expressions: [String : NSExpression],
model: any PersistentModel.Type,
where predicate: NSPredicate? = nil) throws -> Bool
Run Code Online (Sandbox Code Playgroud)
作为一名新开发人员,我不知道其中大部分意味着什么或如何使用它。我的代码如下:
try? context.update(expressions ["teamScores":NSExpression(format: "\(teamScores)")], model: CounterModel.self)
Run Code Online (Sandbox Code Playgroud)
它失败了exception of type NSException。
老实说,我没能尝试太多。截至撰写本文时,这样一个新框架实际上已经在 6 天前发布,除了设置模型、保存数据和查询数据库之外,没有太多文档或示例。
要更新 SwiftData 中的数据,我们不需要直接接触 modelContext。我们只需要更新实例,数据就会自动更新。
这是一个简单的添加列表项目并在 didTapped 时跟踪列表的示例:
@Model final class AnyItem {
var name: String
var didTapped: Bool = false
init(name: String) {
self.name = name
}
}
struct ContentView: View {
@State var itemName: String = ""
@Environment(\.modelContext) private var modelContext
@Query var items: [AnyItem]
var body: some View {
NavigationStack {
List {
Section {
TextField("Item name", text: $itemName)
Button("Submit", action: addItem)
}
ForEach(items) { item in
Section {
Text(item.name)
Text("Did tapped: \(item.didTapped.description)")
}
.onTapGesture {
updateItem(item)
}
}
}
}
}
private func addItem() {
withAnimation {
let newItem = AnyItem(name: itemName)
modelContext.insert(newItem)
itemName = ""
}
}
private func updateItem(_ item: AnyItem) {
withAnimation {
item.didTapped = true
}
}
}
#Preview {
ContentView()
.modelContainer(for: AnyItem.self, inMemory: true)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7081 次 |
| 最近记录: |