如何在Swift中初始化一个对象时将自我传递给初始化器?
我有以下代码:
import CoreBluetooth class BrowserSample: NSObject, CBCentralManagerDelegate { let central : CBCentralManager init() { central = CBCentralManager(delegate: self, queue: nil, options: nil) super.init() } func centralManagerDidUpdateState(central: CBCentralManager!) { } }
如果我把super.init()
之前的central =
行,那么我得到的错误:
self used before super.init() call
如果我把它放在后面,我得到的错误:
Property self.central not initialized at super.init call
所以,我很困惑。 我该怎么做呢?
一个解决方法是使用ImplicitlyUnwrappedOptional
所以central
初始化nil
class BrowserSample: NSObject, CBCentralManagerDelegate { var central : CBCentralManager! init() { super.init() central = CBCentralManager(delegate: self, queue: nil, options: nil) } func centralManagerDidUpdateState(central: CBCentralManager!) { } }
或者你可以试试@lazy
class BrowserSample: NSObject, CBCentralManagerDelegate { @lazy var central : CBCentralManager = CBCentralManager(delegate: self, queue: nil, options: nil) init() { super.init() } func centralManagerDidUpdateState(central: CBCentralManager!) { } }