Представление 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 !!
}
Другие вопросы по тегам