Представление SwiftUI не обновляется при изменении @ObservedObject
Вот простой TestView на основе MVVM:
import SwiftUI
public struct Test: View {
@ObservedObject public var viewModel = TestViewModel()
public init() {
}
public var body: some View {
VStack {
Text(viewModel.model.stri)
Button(action: {
self.viewModel.change()
}) {
Text("Change")
}
}.padding(50)
}
}
public class TestModel {
@Published public var condition: Bool = false
@Published var stri = "Random numbers"
}
public class TestViewModel: ObservableObject {
@Published var model = TestModel()
func change() {
model.condition.toggle()
model.stri = "\(Int.random(in: 1...10))"
}
}
Представление не обновляется, когда модель обновляется изнутри модели представления. Наконец, в тексте должно появиться случайное число от 1 до 10. Пожалуйста, дайте мне знать, где я ошибаюсь.
1 ответ
Решение
Это потому, что ваш Test
вид наблюдает viewModel
но нет viewModel.model
который не изменяется в вашем сценарии, потому что это ссылочный тип
Ниже приводится решение
func change() {
model.condition.toggle()
model.stri = "\(Int.random(in: 1...10))"
self.objectWillChange.send() // << this one !!
}