微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ObservedObject 更改时的通知

如何解决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) } } 是带有 @PublishedpropertyWrapper。在这种情况下,projectedValueprojectedValue,每次更改 Publisher 时都会发出事件,因此为了访问 wrappedValue,必须调用 { {1}} 而不是 projectedValue

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。