首页 > 解决方案 > 如何将对象(不是视图控制器)注册为通知中心观察者

问题描述

NotificationCenter.default.addObserver(_:selector:name:object: )我知道您可以通过添加视图控制器的viewDidLoad()方法(self作为第一个参数)轻松地将视图控制器注册为通知中心观察者。但是当实例化一个不是视图控制器的对象时,你如何做到这一点?我遇到的问题是,当我将addObserver()方法放入 中时init()self参数会抛出错误,因为对象尚未初始化。在视图控制器的viewDidLoad()方法中,您不会遇到这个问题,因为在viewDidLoad调用时,视图控制器已经初始化。

有小费吗?提前致谢

标签: iosswiftnsnotificationcenter

解决方案


您必须先完成属性的初始化,或者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,
                                               selector: #selector(handle),
                                               name: .init("NotificationName"),
                                               object: nil)
    }
    
    @objc func handle() {}
    
}

推荐阅读