【发布时间】:2020-03-30 20:28:51
【问题描述】:
我知道在哪些情况下可以使用@Binding 和@Published
就像在ObservableObject中我一般使用@Published,或者objectWillChange.send()
@Binding 在子视图中将更改传播到父视图
但在这里我有 sn-p,它似乎正在使用 @Binding 和 @Published
在 ObservableObject
我考虑有什么区别。
@Binding var input: T
@Binding var validation: Validation
@Published var value: T {
didSet {
self.input = self.value
self.validateField()
}
}
init(input: Binding<T>, rules: [Rule<T>], validation: Binding<Validation>) {
self._input = input
self.value = input.wrappedValue
self.rules = rules
self._validation = validation
}
正如我测试的那样,如果我将 TextField 绑定到 @Published 然后会调用 didSet 但如果我将它绑定到 @Binding 则不会调用 didSet。
【问题讨论】:
-
一个简单的区别是@publish 适用于
downward或孩子,而@binding 适用于upwards/ 父母。您可以在某些情况下将两者结合在一起,但并非总是必要的