通知中心在swift中的工作原理
加上这个,通知中心在swift中的工作原理,swift,Swift,加上这个, class A { init{ NotificationCenter.default.addObserver(self, selector: #selector(self.getData), name: NSNotification.Name(rawValue: "notify"), object: nil) } } 如果发生了名为“notify”的事件,通知中心可以在的实例中执行“self.getData()” 但我不明白它是怎么工作的。 当Notific
class A {
init{
NotificationCenter.default.addObserver(self, selector: #selector(self.getData), name: NSNotification.Name(rawValue: "notify"), object: nil)
}
}
如果发生了名为“notify”的事件,通知中心可以在的实例中执行“self.getData()”
但我不明白它是怎么工作的。
当NotificationCenter存储一个实例时,它将实例的类型设置为“Any”,而不是“A”
我认为如果NotificationCenter尝试调用函数“getData()”,它应该像
let a = instance as! A
a.getData()
但这太奇怪了。。。如果有人解释它是如何工作的,我会非常感激
谢谢大家!
NotificationCenter
使用Objective C运行时发送消息,这就是您传递选择器的原因,并且必须标记选择器@objc
对于类型,Objective C运行时要轻松得多。它不知道A
是什么,它只知道它必须向它发送消息getData
,希望A
知道该做什么
在Objective C中改进选择器之前,您会将选择器的名称作为字符串传递,任何输入错误都会导致崩溃,因为a
不知道getDaya
(例如)是什么
它们经过改进,可以在编译代码时进行检查,但底层机制没有改变