SwiftUI:观察发布对象的内部更改

伟业

SwiftUI,Swift 5.2,Xcode 11.4

我试图观察单例中的变化,但是我并不总是刷新我的SwiftUI视图:

final class Patient: ObservableObject {
      static var shared: Patient
      @Published var medicalData: MedicalData

      init { ... }

      final class MedicalData { 
            var allergies: String
            var ...

            init { ... }
      }
}

因此,在我的SwiftUI视图中:

struct ContentView: View {
       @ObservedObject var patient: Patient = Patient.shared
       var body: some view { ... }
}

如果有任何对象替换医疗数据,发布者将正确通知我的SwiftUI:

patient.medicalData = NEW_MEDICAL_DATA --> OK! View refreshed

但是,如果任何对象更改了当前医疗数据中的值,则不会刷新SwiftUI视图:

patient.medicalData.allergies = "Alcanfor" --> NOT PUBLISHED

有谁知道如何做到这一点?先感谢您。

伟业

找到了一种执行此操作的优雅方法(请参阅参考资料didSet):

final class Patient: ObservableObject {
      static var shared: Patient
      @Published var medicalData = MedicalData() { 
           didSet {
                  suscription = medicalData.objectWillChange.sink { [weak self] _ in
                        self?.objectWillChange.send()
                  }
           }
      }
      var suscription: AnyCancellable?

      init { ... }
}

如果属性已初始化,则可以直接使用。如果没有,只需didSet在初始化medicalData属性“ init()”也编写代码

当然,MedicalData必须符合ObservableObject协议。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章