簡體   English   中英

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 = $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM