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 { ... }
}
}
Run Code Online (Sandbox Code Playgroud)
所以,在我的 SwiftUI 视图中:
struct ContentView: View {
@ObservedObject var patient: Patient = Patient.shared
var body: some view { ... }
}
Run Code Online (Sandbox Code Playgroud)
如果任何对象替换了医疗数据,发布者将正确通知我的 SwiftUI:
patient.medicalData = NEW_MEDICAL_DATA --> OK! View refreshed
Run Code Online (Sandbox Code Playgroud)
但是,如果任何对象更改了当前医疗数据中的值,则不会刷新 SwiftUI 视图:
patient.medicalData.allergies = "Alcanfor" --> NOT PUBLISHED
Run Code Online (Sandbox Code Playgroud)
有谁知道如何做到这一点?先感谢您。
Alb*_*tUI 11
找到了一种优雅的方法来执行此操作(请参阅didSet
):
final class Patient: ObservableObject {
static var shared: Patient
@Published var medicalData = MedicalData() {
didSet {
subscription = medicalData.objectWillChange.sink { [weak self] _ in
self?.objectWillChange.send()
}
}
}
var subscription: AnyCancellable?
init { ... }
}
Run Code Online (Sandbox Code Playgroud)
如果该属性已初始化,则可以开箱即用。如果没有,只需在“init()”处didSet
初始化属性后编写代码即可。medicalData
当然,MedicalData
必须符合ObservableObject
协议。
归档时间: |
|
查看次数: |
2273 次 |
最近记录: |