如何在外部类中更新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
相关产品推荐
相关产品推荐

