Я создаю новое приложение watchOS с использованием SwiftUI и Combine, пытаясь использовать архитектуру MVVM, но когда моя viewModel изменяется, я не могу получить текстовое представление для обновления в моем View.
Я использую 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()
, когда свойство обновляется, но ничего не работает.
Я что-то делаю не так?