我知道在哪种情况下使用@Binding
和@Published
就像 ObservableObject 中一样,我通常使用 @Published 或objectWillChange.send()
子视图中的@Binding
和@Binding
会将更改传播到父视图
但是在这里,我有一个似乎同时使用@Published
和 @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
}
的代码段
在 ObservableObject
我考虑有什么区别。
{{1}}
正如我测试的那样,如果我将TextField绑定到@Published,那么将调用didSet,但是如果我将其绑定到@Binding,则将不会调用didSet。
答案 0 :(得分:0)
对于@Binding,我发现如果直接分配给该属性,则会调用didSet
。尝试在xcode游乐场中运行此示例:
import SwiftUI
import Combine
struct MyView: View {
@Binding var value: Int {
didSet {
print("didSet", value)
}
}
var body: some View { Text("Hello") }
}
var myBinding = Binding<Int>(
get: { 4 },
set: { v in print("set", v)})
let view = MyView(value: myBinding)
view.value = 99
输出:
set 99
didSet 4
关于@Published
和@Binding
之间的区别:
@Binding
在视图层次结构中传递源自某些真相(例如@State
)的绑定。@Published
中使用ObservableObject
,以允许视图对属性更改做出反应。