【发布时间】:2020-01-22 03:16:41
【问题描述】:
好的,所以 SwiftUI 和 ObservableObject 在 iOS 13 上。我有实现 ObservableObject 的 Model:
class Model: ObservableObject {
@Published public var toggle: Bool = false
init() {
NSLog("Model init")
objectWillChange.sink { void in
NSLog("1 toggle \(self.toggle)")
}
$toggle.sink { v in
NSLog("2 toggle \(self.toggle) -> \(v)")
}
}
}
和一个切换toggle的按钮:
struct ContentView: View {
@ObservedObject var model: Model
var body: some View {
Button(action: {
self.model.toggle.toggle()
}, label: {Text(model.toggle ? "on" : "off")})
}
}
现在,这行得通。您按下按钮,它会在“开”和“关”之间切换。 (在制作toggle @Published 之前,它没有。)但是,日志记录没有按预期工作。我在启动时立即得到两个日志:“模型初始化”和“2 toggle false -> false”。点击按钮,虽然显然改变了toggle 的值,但不会导致执行任何闭包。
当视图更改您的模型时,我希望有一种方法可以通知更改,以防您需要例如更新计算值或同步到磁盘或其他东西。也许sink是错误的方法?
如何在更新其字段时通知带有@Published 字段的ObservableObject?
【问题讨论】:
标签: ios swift observable swiftui