Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通知中心在swift中的工作原理_Swift - Fatal编程技术网

通知中心在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
(例如)是什么

它们经过改进,可以在编译代码时进行检查,但底层机制没有改变