问题描述
我知道您可以通过在视图控制器的 NotificationCenter.default.addobserver(_:selector:name:object: )
方法(使用 viewDidLoad()
作为第一个参数)中添加 self
来轻松地将视图控制器注册为通知中心观察者。但是当实例化一个不是视图控制器的对象时,你如何做到这一点?我遇到的问题是,当我将 addobserver()
方法放在 init()
中时,self
参数会抛出错误,因为该对象尚未初始化。在视图控制器的 viewDidLoad()
方法中,您不会遇到这个问题,因为在调用 viewDidLoad
时,视图控制器已经初始化。
有什么建议吗?提前致谢
解决方法
您必须先完成属性的初始化,或者如果您要对类进行子类化,则调用 super.init
。
下面的例子可以工作:
class AClass {
init() {
NotificationCenter.default.addObserver(self,selector: #selector(handle),name: .init("NotificationName"),object: nil)
}
@objc func handle() {}
}
或继承:
class BaseClass {}
class BClass: BaseClass {
override init() {
super.init()
NotificationCenter.default.addObserver(self,object: nil)
}
@objc func handle() {}
}