Tal*_*ode 4 sprite-kit swift swiftui observedobject observableobject
我有一个由几个 SwiftUI 组件组成的图形用户界面(我们称它们为子视图)。这些子视图在 ObservableObject / ObservedObject 的帮助下相互通信。当一个视图发生更改时,另一个视图会自动收到通知并自行更新。
然而,其中一个子视图不是 SwiftUI 视图,而是 SpriteKit SKScene。在这里,我也想对观察值的变化做出反应。但我没有自动更新的视图。我想根据观察到的值对精灵进行调整。
我如何得知价值的变化?我可以在 ObservedObject 的值发生变化时立即调用方法吗?
Alb*_*tUI 10
从 UIKit 或 SKScene 中很容易观察 ObservedObject 的变化。下面的示例来自 UIViewController,将其更改为与 SKScene 等效:
\nimport Combine\n\nclass Object: ObservableObject {\xc2\xa0\n @Published var value: Int = 10\n @Published var anotherValue: String = "Hello"\n}\n\nclass MyViewController: UIViewController {\xc2\xa0\n\n let observedObject = Object()\n var cancellableBag = Set<AnyCancellable>()\n\n override func viewDidLoad() {\xc2\xa0\n super.viewDidLoad()\n\n // REACT TO ANY @PUBLISHED VARIABLE\n observedObject.objectWillChange.sink {\xc2\xa0\n // Do what you want here\n }.store(in: &cancellableBag)\n\n // REACT ONLY TO ONE SPECIFIED @PUBLISHED VARIABLE\n observedObject.$value.sink {\xc2\xa0value in\n // Do what you want here\n }.store(in: &cancellableBag)\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n请注意,这@Published
是一个propertyWrapper
with projectedValue
。在本projectedValue
例中, 是Publisher
, 每次wrappedValue
更改时都会发出事件,因此为了访问 ,projectedValue
有必要调用$value
而不是value
。
归档时间: |
|
查看次数: |
3277 次 |
最近记录: |