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] 删除。
我来说两句