You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在外部类中更新SwiftUI视图的状态变量?

在SwiftUI中从外部类更新ObservableObject的状态

你现在的问题核心是**ContentView和ExtenalClass里的Fruits是两个完全独立的实例**。当你调用extenalClass.fChangePrice()时,修改的是ExtenalClass自己创建的那个Fruits对象的价格,而视图绑定的是ContentView里的另一个Fruits实例,所以视图不会更新。

解决方法

不要让ExtenalClass自己初始化Fruits,而是通过初始化方法传入ContentView里的实例,让外部类和视图共享同一个数据源对象:

class Fruits: ObservableObject {
    @Published var price = 1
}

struct ContentView: View {
    @ObservedObject var fruits = Fruits()
    var extenalClass: ExtenalClass
    
    init() {
        // 初始化外部类时传入当前的fruits实例
        extenalClass = ExtenalClass(fruits: fruits)
    }
    
    var body: some View {
        VStack {
            Text(String(fruits.price))
                .padding()
            Button("Add-Me") {
                extenalClass.fChangePrice()
                print(fruits.price)
            }
        }
    }
}

class ExtenalClass: ObservableObject {
    // 持有外部传入的Fruits实例
    var fruits: Fruits
    
    // 通过初始化方法接收外部的Fruits实例
    init(fruits: Fruits) {
        self.fruits = fruits
    }
    
    func fChangePrice() {
        fruits.price = 888
        print(fruits.price)
    }
}

说明

修改后,ExtenalClass操作的就是ContentView里的同一个Fruits对象,当调用fChangePrice()修改price时,@Published属性会自动发送变更通知,视图就能同步更新显示最新的价格了。

内容的提问来源于stack exchange,提问作者Jacky Lau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:35:30