如何解决通知中心的工作原理
通过添加它,
class A {
init{
NotificationCenter.default.addobserver(self,selector: #selector(self.getData),name: NSNotification.Name(rawValue: "notify"),object: nil)
}
}
如果发生了一个名为“ notify”的事件,则通知中心可以在A的实例中执行“ self.getData()”。
但是我不明白它是如何工作的。 NotificationCenter存储A的实例时,它将获得实例类型为“ Any”而不是“ A”。
我认为,如果NotificationCenter尝试调用函数“ getData()”,它应该会这样做,
let a = instance as! A
a.getData()
但这太奇怪了……如果有人解释它是如何工作的,我将非常感激。
谢谢!
解决方法
NotificationCenter
使用Objective C运行时发送消息,这就是为什么要传递选择器,并且选择器必须标记为@objc
的原因。
在类型方面,Objective C运行时要轻松得多。它不知道A
是什么,只是知道它必须向其发送消息getData
,并希望A
将知道该怎么做。
在Objective C中改进选择器之前,您将选择器的名称作为字符串传递,并且任何错字都将导致崩溃,因为A
不知道getDaya
是什么(例如)
改进了它们,以便在编译代码时进行检查,但是底层机制没有改变。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。