Я изучаю SwiftUI и пытаюсь реализовать простой таймер с MVVM-шаблоном. Но точка зрения Таймера не перерисовывается. В чем проблема?
// Timer Model
import Foundation
class TimerModel {
let label: String = "Counter"
var count: Int = 0
}
// Timer View Model
import Foundation
import SwiftUI
import Combine
class TimerViewModel: ObservableObject {
@Published var timerModel: TimerModel = TimerModel()
var label: String {
return self.timerModel.label
}
var count: Int {
return self.timerModel.count
}
func startTimer() {
Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { (timer) in
DispatchQueue.main.async {
self.timerModel.count += 1
}
}
}
}
// Timer View
import SwiftUI
import Combine
struct TimerView: View {
@ObservedObject var timerViewModel: TimerViewModel
init() {
self.timerViewModel = TimerViewModel()
}
var body: some View {
VStack {
Text("\(self.timerViewModel.label): \(self.timerViewModel.count)")
Button(action: {
self.timerViewModel.startTimer()
}, label: {
Text("Start")
})
}
}
}
struct TimerView_Previews: PreviewProvider {
static var previews: some View {
TimerView()
}
}
// Content View
import SwiftUI
struct ContentView: View {
var body: some View {
TimerView()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Свойство count модели таймера в модели представления таймера изменяется каждую секунду, но представление таймера не отображается повторно. Спасибо за любую идею для реализации MVVM-шаблона.