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

问题描述

我知道您可以通过在视图控制器的 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() {}
    
}