如何解决ObservedObject 更改时的通知
我有一个由几个 SwiftUI 组件组成的图形用户界面(我们称之为子视图)。 这些子视图在 ObservableObject / Observedobject 的帮助下相互通信。 当对一个视图进行更改时,另一个视图会自动收到通知并自行更新。
然而,其中一个子视图不是 SwiftUI 视图而是 SpriteKit SKScene。 在这里,我也想对观测值的变化做出反应。 但是我没有自动更新的视图。我想根据观察到的值对精灵进行调整。
如何通知我值的变化? 是否可以在 Observedobject 的值发生变化时立即调用方法?
解决方法
很容易从 UIKit 或 SKScene 观察 ObservedObject 的变化。下面的示例来自 UIViewController,将其更改为等效于 SKScene:
const updateSelectedItem = (index,value) => {
const updatedData = [...data];
updatedData[index].active = value;
setData(updatedData);
};
请注意,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
的 propertyWrapper
。在这种情况下,projectedValue
是 projectedValue
,每次更改 Publisher
时都会发出事件,因此为了访问 wrappedValue
,必须调用 { {1}} 而不是 projectedValue
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。