gpt4 book ai didi

objective-c - KVO 或如何在 Swift 中监听来自外部的属性变化

转载 作者:可可西里 更新时间:2023-11-01 01:00:01 26 4
gpt4 key购买 nike

我有一个带有属性的实例,我想监听来自其他实例的更新。

例如 Menu 类有一个属性 badgeCount,我想监听 badgeCount 的任何更新,例如当 badgeCount 发生变化时。我希望我的 ViewController 在修改 badgeCount 以了解实际数据后进行回调。

目标是我可以将 KVO 用于列出的属性,我如何在 Swift 中使用 KVO。我是 Swift 的新手。

最佳答案

如果你想在swift中使用KVO,有两个要求:

  • 你想做 KVO 的类必须继承自 NSObject(或任何 NSObject 子类)
  • 你需要观察的属性必须标记为dynamic

一个代码示例是:

class Menu: NSObject {
dynamic var badgeCount: Int = 0
}

然后,您可以使用通常的 menuInstance.addObserver(self, forKeyPath: "badgeCount", options: NSKeyValueObservingOptions(), context: nil)

但是这个解决方案不是很 swift


更好的解决方案是(不是详尽的列表):

使用swift的didSet/willSet调用回调

class Menu {
var badgeCount: Int = 0 {
didSet {
badgeCountChangedListener(badgeCount)
}
}

init(badgeCountChangedListener: (Int -> Void)) {
self.badgeCountChangedListener = badgeCountChangedListener
}

private let badgeCountChangedListener: (Int -> Void)
}

使用RxSwift's 变量类型

class Menu {
let badgeCount = Variable(0)
}

// and from where you observe
menuInstance.badgeCount.subscribeNext { badgeCount in
print(badgeCount)
}

关于objective-c - KVO 或如何在 Swift 中监听来自外部的属性变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35802715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com