我知道在调用之前需要定义所有属性super.init()
。但是,如果属性的初始化依赖于该self
怎么办?就我而言,我需要初始化一个具有委托的对象,该对象需要设置为self
。做这个的最好方式是什么?
class MyClass : NSObject {
var centralManager : CBCentralManager
override init() {
super.init()
centralManager = CBCentralManager(delegate: self, queue: nil)
}
}
这是错误的,因为centralManager
未在之前初始化super.init
。但是我也不能更改顺序,因为那样的话我会使用self
before super.init
。
假设CBCentralManager
定义如下
protocol CBCentralManagerDelegate { }
class CBCentralManager {
init(delegate: CBCentralManagerDelegate, queue: Any?) {
}
}
这是定义班级的方式
class MyClass: CBCentralManagerDelegate {
lazy var centralManager: CBCentralManager = {
[unowned self] in CBCentralManager(delegate: self, queue: nil)
}()
}
如您所见,我正在使用lazy
属性填充该centralManager
属性。
该lazy
属性具有关联的闭包,该闭包在第一次读取lazy属性时执行。
由于只有在初始化当前对象后才能读取lazy属性,因此一切正常。
NSObject在哪里?
正如你所看到我删除的继承
MyClass
从NSObject
。除非您有很好的理由可以很好地继承NSObject
...否则,请不要这样做:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句