[英]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
是一個帶有projectedValue
的propertyWrapper
。 在這種情況下, projectedValue
是Publisher
,它會在每次wrappedValue
發生更改時發出事件,因此為了訪問projectedValue
,有必要調用$value
而不是value
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.