簡體   English   中英

ObservedObject 更改時的通知

[英]Notifications when an ObservedObject is changed

我有一個由幾個 SwiftUI 組件組成的圖形用戶界面(我們稱它們為子視圖)。 這些子視圖在 ObservableObject / ObservedObject 的幫助下相互通信。 當對一個視圖進行更改時,會自動通知另一個視圖並自行更新。

但是,其中一個子視圖不是 SwiftUI 視圖,而是 SpriteKit SKScene。 在這里,我也想對觀察值的變化做出反應。 但我沒有自動更新的觀點。 我想根據觀察到的值對精靈進行調整。

如何通知我價值的變化? 一旦 ObservedObject 的值發生變化,我可以調用方法嗎?

從 UIKit 或 SKScene 很容易觀察到 ObservedObject 的變化。 下面的示例來自 UIViewController,將其更改為等效於 SKScene:

import Combine

class Object: ObservableObject { 
    @Published var value: Int = 10
    @Published var anotherValue: String = "Hello"
}

class MyViewController: UIViewController { 

    let observedObject = Object()
    var cancellableBag = Set<AnyCancellable>()

    override func viewDidLoad() { 
        super.viewDidLoad()

        // TO REACT TO ENTIRE OBJECT
        observedObject.objectWillChange.sink { 
              // Do what you want here
        }.store(in: &cancellableBag)

        // TO REACT ONLY TO ONE VALUE, not entire object
        observedObject.$value.sink { value in
              // Do what you want here
        }.store(in: &cancellableBag)
    }
}

請注意, @Published是一個帶有projectedValuepropertyWrapper 在這種情況下, projectedValuePublisher ,它會在每次wrappedValue發生更改時發出事件,因此為了訪問projectedValue ,有必要調用$value而不是value

暫無
暫無

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

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