gpt4 book ai didi

ios - 嵌入式@Binding 不会更改值

转载 作者:行者123 更新时间:2023-12-01 15:42:44 25 4
gpt4 key购买 nike

关注 this cheat sheet我试图找出 SwiftUI 中的数据流。所以:

Use @Binding when your view needs to mutate a property owned by an ancestor view, or owned by an observable object that an ancestor has a reference to.


这正是我需要的,所以我的嵌入式模型是:
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 对象:
enter image description here
为什么它的行为不同?

最佳答案

发布属性(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com