如何在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!) { } }