如何将对象(不是视图控制器)注册为通知中心观察者

How to register an object (that isn't a view controller) as a Notification Center observer

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

有什么建议吗?提前致谢

您必须先完成属性的初始化,或者如果您正在 class 子 class 调用 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() {}
    
}