我試圖弄清楚如何讓 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,可以讓我sold在 Car 物體上設定屬性。
Toggle(isOn: Binding<Bool>(get: { model.car.sold }, set: { model.car.sold = $0 } )) {
if model.car.sold {
Text("ON")
} else {
Text("OFF")
}
}
切換控制元件確實會sold在汽車實體上設定屬性,但是,切換標簽:
if model.car.sold {
Text("ON")
} else {
Text("OFF")
}
不會相應更新。
因此,如果我整體更改汽車物體,事情就會更新,如果我更改物體的屬性,則視圖不會更新。然后我實作了sink邏輯,然后sold在模型上設定一個已發布的屬性。因此,sold汽車上的屬性由切換設定,接收器啟動并設定 model.sold,然后切換標簽 Text 會更新。
我怎樣才能取消@Published var sold:Bool = false模型中的附加內容,而只是讓 Toggle 標簽對實際car.sold屬性做出反應?
uj5u.com熱心網友回復:
直接觀察 Car,它確認到 ObservableObject,所以而不是視圖模型傳入視圖,就像
struct CarView: View {
@ObservedObject var car: Car
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465804.html
