【发布时间】:2020-11-10 06:35:45
【问题描述】:
我有一个带有name 字段的Thing 核心数据实体。当我在List 中显示[Thing] 时,我希望能够在子视图中编辑name。这是实现这一点的代码,但感觉就像糟糕的架构。 ThingView 应该真正通过 thing,而不是 thing.name!
相反,我真的想将Thing 传递给ThingView,但如果我只是这样做,那么更新thing.name 不会导致视图更新,因为Thing 是一个引用类型。这里有关于简洁设计的想法吗?
struct ContentView: View {
@ObservedObject var observableAllData: ObservableAllData
var body: some View {
NavigationView{List(observableAllData.allData.things.indices) { index in
NavigationLink(destination:ThingView(
thingName: $observableAllData.allData.things[index].name)) {
Text(observableAllData.allData.things[index].name)}
}
}
}
}
struct ThingView: View {
@Binding var thingName: String
func updateThing() {
thingName = "NEW"
}
var body: some View {
VStack{
Text(thingName)
Button(action: updateThing) { Text("Update it!")}
}
}
}
编辑:澄清我想要ThingView 和ContentView
单击“更新”时进行更新。
【问题讨论】: