SwiftUI:对 SwiftUI 视图中的 NSManagedObject 属性 变化做出反应?
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 = [=12=] } )) {
if model.car.sold {
Text("ON")
} else {
Text("OFF")
}
}
切换控件确实会在汽车实例上设置 sold
属性,但是,切换标签:
if model.car.sold {
Text("ON")
} else {
Text("OFF")
}
不相应更新。
因此,如果我更改整个汽车实体,则事物会更新,如果我更改实体的 属性,则视图不会更新。因此,我实施了 sink
逻辑,然后在模型上设置已发布的 sold
属性。因此汽车上的 sold
属性 由开关设置,水槽启动并设置 model.sold,然后开关标签文本会更新。
我怎样才能去掉模型中的附加 @Published var sold:Bool = false
并简单地使 Toggle 标签对实际的 car.sold
属性 做出反应?
直接观察 Car,它确认到 ObservableObject,所以而不是视图模型传递视图
struct CarView: View {
@ObservedObject var car: Car
我正在尝试弄清楚如何让 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 = [=12=] } )) {
if model.car.sold {
Text("ON")
} else {
Text("OFF")
}
}
切换控件确实会在汽车实例上设置 sold
属性,但是,切换标签:
if model.car.sold {
Text("ON")
} else {
Text("OFF")
}
不相应更新。
因此,如果我更改整个汽车实体,则事物会更新,如果我更改实体的 属性,则视图不会更新。因此,我实施了 sink
逻辑,然后在模型上设置已发布的 sold
属性。因此汽车上的 sold
属性 由开关设置,水槽启动并设置 model.sold,然后开关标签文本会更新。
我怎样才能去掉模型中的附加 @Published var sold:Bool = false
并简单地使 Toggle 标签对实际的 car.sold
属性 做出反应?
直接观察 Car,它确认到 ObservableObject,所以而不是视图模型传递视图
struct CarView: View {
@ObservedObject var car: Car