【发布时间】:2021-02-28 21:27:22
【问题描述】:
我正在测试非常简单的代码,有一个类确认@ObservableObject 协议,并且有两个@Published 属性,一个是我的自定义type 对象的数组,另一个只是普通的type同班。我有两种观点,父母持有单一事实来源,它有一个List 和一个navigationLink。 NavigationLink 正在将 @Published 数组对象作为 Binding 传递给 subView。
问题-:
当我输入TextField 时,视图没有更新。它正在修改@Published 对象属性,但不更新子视图。仅当我使用 Array 的对象进行测试时才会发生这种情况,但现在如果我评论 array 的对象属性并简单地使用另一个(不带数组),它会更新得很好。
谁能解释背后的原因,这是一个错误吗?还是Array 在幕后做其他事情?
不工作示例-:
import SwiftUI
struct Person: Identifiable {
let id: String = UUID().uuidString
var name: String = "Tushar"
var age: Int = 25
init(name: String,age: Int) {
self.name = name
self.age = age
}
}
class PersonStore: ObservableObject {
@Published var name: [Person] = [Person(name:"foo",age:23),Person(name:"foobar",age:23)]
//@Published var name: Person = Person(name:"foo",age:23)
}
struct ContentViewsss: View {
@ObservedObject var store = PersonStore()
@State var isEditing = false
var body: some View {
NavigationView{
List(store.name.indices){ index in
NavigationLink(destination: ContentViewsss1(store: $store.name[index])) {
Text("Edit")
}
}.navigationTitle(“Welcome")
}
}
}
struct ContentViewsss1: View {
@Binding var store: Person
var body: some View {
TextField("My Text", text: $store.name)
Text(store.name)
}
}
工作示例-:
import SwiftUI
struct Person: Identifiable {
let id: String = UUID().uuidString
var name: String = "Tushar"
var age: Int = 25
init(name: String,age: Int) {
self.name = name
self.age = age
}
}
class PersonStore: ObservableObject {
// @Published var name: [Person] = [Person(name:"foo",age:23),Person(name:"foobar",age:23)]
@Published var name: Person = Person(name:"foo",age:23)
}
struct ContentViewsss: View {
@ObservedObject var store = PersonStore()
@State var isEditing = false
var body: some View {
NavigationView{
List{
NavigationLink(destination: ContentViewsss1(store: $store.name)) {
Text("Edit")
}
}.navigationTitle("Welcome")
}
}
}
struct ContentViewsss1: View {
@Binding var store: Person
var body: some View {
TextField("My Text", text: $store.name)
Text(store.name)
}
}
【问题讨论】:
标签: swiftui swiftui-navigationlink observableobject