我有一个具有多个属性的核心数据模型和一个用于编辑所有这些属性的表单。
我希望“自动保存”更改。因此,一旦我更改表单中的某些内容,它就会保存到我的核心数据上下文中。
我发现自己做了很多自定义绑定来保存更改时的上下文,例如:
TextField("My string",
text: Binding(
get: {
model.myString
},
set: { newValue in
model.myString = newValue
try? context.save()
}
)
)
我想简化我的代码,并有一个特殊的绑定绑定到核心数据上下文以避免这个样板文件。我怎样才能简化这个?
如果你有
@Environment(\.managedObjectContext) var context
@ObservedObject var model: SomeType
在视图顶部
你可以使用
.task(id: model.hasChanges) {
guard model.hasChanges else {return}
try? context.save()
}
只要有变化就会保存。
您可以将其放入 ViewModifier 中,以便在您想要自动保存的任何地方轻松访问。