簡體   English   中英

SwiftUI var: willSet, didSet

[英]SwiftUI var: willSet, didSet

我在 SwiftUI 應用程序中有這種代碼:

@Published var myFlag = false {
    willSet {
        ... useful code ...
        objectWillChange.send()
    }
}

它或多或少有效,但要准確獲得我需要的東西,我想要這樣的東西:

@Published var myFlag = false {
    didSet {
        ... useful code ...
        objectDidChange.send()
    }
}

原因很簡單,我希望在 myFlag 更新而不是之前得到通知。 不過,它似乎不是這樣工作的。 還有其他方法可以得到我想要的嗎?

除了我正在使用這段代碼:

.onReceive(self.appState.$myFlag) {...}

在 ContentView.swift 內

@Published屬性隨意時自動發布willSet ://developer.apple.com/documentation/combine/published

如果您更喜歡在didSet期間發布,請刪除@Published並手動發布。

import SwiftUI
class ManualOObject: ObservableObject {
    var someValue: Int = 0{
        willSet{
            print("willSet - \(someValue)")
        }
        didSet{
            print("didSet - \(someValue)")
            objectWillChange.send()
        }
    }
    init() {
        for n in 0...5 {
            
            DispatchQueue.main.asyncAfter(deadline: .now() + Double(n)) {
                print("n = \(n.description)")
                            self.someValue = n
                        }
        }
    }
}
struct ManualOOView: View {
    @ObservedObject var manualOObject = ManualOObject()
    
    var body: some View {
        Text(manualOObject.someValue.description).onReceive(manualOObject.objectWillChange, perform: { _ in
            print("UI received = \(manualOObject.someValue)")
        })
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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