首页 > 解决方案 > 当通过@Published 更改类中的属性值时,某些observedObjects 不会更新?

问题描述

这些都是代码。

调查问题类

class SurveyQuestion: ObservableObject {
    @Published var text: String

    init() {
        print("Initialising now ...")
        self.text = "HELLO"
        changeText()
    }

    func changeText() {
        print("Changing Text Now from \(text).. ")

        if self.text == "HELLO"{
            self.text = "BYE"
        }
        else{
            self.text = "HELLO"
        }


        print("to \(self.text) \n")


    }
}

子视图.swift

struct SubView: View {

    @ObservedObject var someOtherClass = SurveyQuestion()

    var body: some View {
        Text("Text now is \(someOtherClass.text)")

    }
}

内容视图.swift

struct ContentView: View {

    @ObservedObject var someClass = SurveyQuestion()



    var body: some View {

        VStack{

            Button(action: {
                print("Changing Text Now !")
                self.someClass.changeText()
            }) {
                Text("Change Text ")
            }

            Text("Text now is \(someClass.text)")

            SubView()

        }
    }
}

每当我单击“changeText”按钮时,它会更改 Text(“Text now is (someClass.text)”)中的文本,但不会更改 Subview()。它们都应该使用相同的文本更改进行更新。知道这里出了什么问题吗?

标签: iosswiftxcodeswiftui

解决方案


someClasssomeOtherClass是两个完全不同的对象。改变一个对另一个没有影响。如果这应该是一个可以同时影响不同视图的单例 observable,那么您需要一个环境对象。


推荐阅读