Ios SwiftUI视图在更改@ObservedObject时未更新

Ios SwiftUI视图在更改@ObservedObject时未更新,ios,swift,swiftui,observableobject,Ios,Swift,Swiftui,Observableobject,以下是一个简单的基于MVVM的测试视图: import SwiftUI public struct Test: View { @ObservedObject public var viewModel = TestViewModel() public init() { } public var body: some View { VStack { Text(viewMo

以下是一个简单的基于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之间的随机数。请告诉我哪里出错。

这是因为您的
测试
视图观察
viewModel
,而不是
viewModel.model
,它在您的场景中不会更改,因为它是一种参考类型

下面是一个解决方案

func change() {
    model.condition.toggle()
    model.stri = "\(Int.random(in: 1...10))"

    self.objectWillChange.send()    // << this one !!
}
func change(){
model.condition.toggle()
model.stri=“\(Int.random(in:1…10))”
self.objectWillChange.send()//