ios - 如何将对象(不是视图控制器)注册为通知中心观察者
问题描述
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,
selector: #selector(handle),
name: .init("NotificationName"),
object: nil)
}
@objc func handle() {}
}
推荐阅读
- javascript - SyntaxError:类属性声明上的意外标识符
- java - Project reactor - 如果其他两个并行通量请求已完成,则取消通量 REST API 请求
- python - 如何在我需要我的话后删除单词
- reactjs - 如何阻止 UseEffect 运行外部代码
- reactjs - 如何在 React 中从另一个组件调用一个组件的功能
- javascript - 由于 Eslint 错误,Vue Js 未部署到 Firebase
- java - Visual Studio Code maven 项目 - 如何添加源文件夹
- reactjs - 试图制作一个 onclick 按钮,但它一直说 showTest 未定义
- wpf - Visual Studio XAML 编辑器:剪切和粘贴一段代码时,如何使其保持折叠状态?
- javascript - 无法获取数组的值