【发布时间】:2020-02-02 08:12:51
【问题描述】:
我正在使用 SwiftUI 创建一个新的 watchOS 应用程序,并尝试使用 MVVM 架构,但是当我的 viewModel 更改时,我似乎无法在我的视图中更新文本视图。
我正在使用 watchOS 6、SwiftUI 和 Combine。当我认为应该使用 @ObservedObject 和 @Published 时,我正在使用它们,但更改并没有像我预期的那样反映出来。
// Simple ContentView that will push the next view on the navigation stack
struct ContentView: View {
var body: some View {
NavigationLink(destination: NewView()) {
Text("Click Here")
}
}
}
struct NewView: View {
@ObservedObject var viewModel: ViewModel
init() {
viewModel = ViewModel()
}
var body: some View {
// This value never updates
Text(viewModel.str)
}
}
class ViewModel: NSObject, ObservableObject {
@Published var str = ""
var count = 0
override init() {
super.init()
// Just something that will cause a property to update in the viewModel
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] _ in
self?.count += 1
self?.str = "\(String(describing: self?.count))"
print("Updated count: \(String(describing: self?.count))")
}
}
}
Text(viewModel.str) 从不更新,即使 viewModel 每 1.0 秒递增一个新值。我在属性更新时尝试过objectWillChange.send(),但没有任何效果。
我做错了什么吗?
【问题讨论】:
-
好吧,除非您的
Timer被提前释放,否则应该可以。保持对计时器对象的强引用,这应该可以解决问题。 See this -
定时器不会消失。在本例中,它将无限期地打印到控制台。