gpt4 book ai didi

ios - 观察类实例的属性变化

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

给定一个类的实例,我如何观察属性的变化?例如,我正在构建一个 SDK,用于初始化主机应用程序的聊天 View ,以通过如下所示的简单实现提供更多功能:

sdk.initialize(聊天 View )

在该初始化函数中,我需要跟踪主机应用的聊天 View 的 hidden 属性,以便 SDK 的 View 匹配。

最佳答案

观察隐藏的一个简单的KVO例子:

class SDKViewController : UIViewController {
private var context = 0
private var observingView: UIView?

func initialize(view: UIView) {
removeObservations()

observingView = view

// start observing changes to hidden property of UIView
observingView?.addObserver(self, forKeyPath: "hidden", options: [.New], context: &context)
}

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
if let newValue = change?[NSKeyValueChangeNewKey] as? Bool where context == &self.context {
print("hidden changed: \(newValue)")
}
}

// this is called by deinit
// it should also be called if they can deregister the view from your SDK
func removeObservations() {
if let view = observingView {
view.removeObserver(self, forKeyPath: "hidden")
observingView = nil
}
}

deinit {
removeObservations()
}
}

这是对您的配置做出一些假设,但如果您允许初始化多个 View ,您可以轻松调整。

此外,如果您使用 KVOController,其中的很多内容会更加简洁通过 Facebook,它不在 Swift 中。

编辑:请注意,隐藏确实与 KVO 一起工作。

编辑 #2:将 YourSDKClass 更新为 SDKViewController(NSObject -> UIViewController)

关于ios - 观察类实例的属性变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37029949/

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