this cheat sheet 之后,我试图找出 SwiftUI 中的数据流。所以:

这正是我所需要的,所以我的嵌入式模型是:

class SimpleModel: Identifiable, ObservableObject {
    @Published var values: [String] = []

    init(values: [String] = []) {
        self.values = values
    }
}
我的 View 有两个字段:
struct SimpleModelView: View {
    @Binding var model: SimpleModel
    @Binding var strings: [String]

    var body: some View {
        VStack {
            HStack {
                Text(self.strings[0])
                TextField("name", text: self.$strings[0])
            }
            HStack {
                Text(self.model.values[0])
                EmbeddedView(strings: self.$model.values)
            }
        }
    }
}

struct EmbeddedView: View {
    @Binding var strings: [String]

    var body: some View {
        VStack {
            TextField("name", text: self.$strings[0])
        }
    }
}
所以我希望当输入字段发生变化时 View 会改变 Text 。它适用于 [String] 但不适用于嵌入式 @Binding 对象:
ios - 嵌入式@Binding 不会更改值-LMLPHP
为什么它的行为不同?

最佳答案

发布属性(property)

class SimpleModel: Identifiable, ObservableObject {
    @Published var values: [String] = []
model 观察到
struct SimpleModelView: View {
    @ObservedObject var model: SimpleModel
注意:这在那个方向 - 如果你引入了 ObservableObject 那么相应的 View 应该有 ObservedObject 包装器来观察该可观察对象的已发布属性的变化。

关于ios - 嵌入式@Binding 不会更改值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63073350/

10-12 00:15
查看更多