[英]SwiftUI: react to NSManagedObject property change in SwiftUI view?
我想弄清楚如何讓 SwiftUI 視圖正確地對 NSManagedObject 屬性所做的更改做出反應。
例子:
class MyViewModel: ObservableObject {
@Published var car:Car // <-- NSManagedObject
@Published var sold:Bool = false // <-- I don't want to do this, I want to simply observe the sold property on car and not have to implement this sink logic below
var subs = [AnyCancellable]()
init(car:Car) {
self.car = car
self.sold = car.sold
self.car.publisher(for: \.sold)
.removeDuplicates()
.receive(on: RunLoop.main)
.sink { [weak self] sold in
self?.sold = sold
}
.store(in: &subs)
}
}
例如,我有一個 Toggle 可以讓我在 Car 實體上設置sold
屬性。
Toggle(isOn: Binding<Bool>(get: { model.car.sold }, set: { model.car.sold = $0 } )) {
if model.car.sold {
Text("ON")
} else {
Text("OFF")
}
}
切換控件確實會在 car 實例上設置sold
屬性,但是,Toggle label:
if model.car.sold {
Text("ON")
} else {
Text("OFF")
}
不會相應更新。
因此,如果我更改整個汽車實體,則事物會更新,如果我更改實體的屬性,則視圖不會更新。 然后我實現了接收sink
邏輯,然后在 model 上設置已發布的sold
屬性。因此汽車上的sold
屬性由切換設置,接收器啟動並設置 model.sold,然后切換 label 文本確實更新.
我怎樣才能去掉 model 中的附加@Published var sold:Bool = false
並簡單地使 Toggle label 對實際的car.sold
屬性做出反應?
直接觀察 Car,它確認到 ObservableObject,所以而不是視圖 model 傳遞視圖
struct CarView: View {
@ObservedObject var car: Car
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.