我正在试图弄清楚如何让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)
}
}
例如,我有一个开关,可以设置
sold
汽车实体上的属性。
Toggle(isOn: Binding<Bool>(get: { model.car.sold }, set: { model.car.sold = $0 } )) {
if model.car.sold {
Text("ON")
} else {
Text("OFF")
}
}
切换控件会设置
出售
属性,但切换标签:
if model.car.sold {
Text("ON")
} else {
Text("OFF")
}
不会相应更新。
因此,如果我将汽车实体作为一个整体进行更改,情况会更新,如果我更改实体的属性,视图不会更新。于是我实施了
sink
然后设置已发布的
出售
属性。所以
出售
汽车上的属性由切换开关设置,水槽将启动并设置模型。售出后,切换标签文本将更新。
我怎样才能取消额外的费用呢
@Published var sold:Bool = false
car.sold
所有物