繁体   English   中英

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

[英]SwiftUI view not getting updated on changing @ObservedObject

这是一个简单的基于 MVVM 的 TestView:

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))"
    }
}

当 model 从视图 model 内部更新时,视图不会更新。 文本最终应该会产生一些介于 1 和 10 之间的随机数。请让我知道我哪里出错了。

这是因为您的Test视图观察viewModel而不是viewModel.model在您的场景中没有更改,因为它是参考类型

以下是解决方案

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

    self.objectWillChange.send()    // << this one !!
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM