2014-06-26 49 views
8

Aşağıdaki kodu var: Ben sonra koyarsanızSwift'de bir nesnenin başlatılması sırasında kendiliğinden başlatıcıya nasıl geçilir?

self used before super.init() call 

, ben hata alıyorum:

import CoreBluetooth 

class BrowserSample: NSObject, CBCentralManagerDelegate { 
    let central : CBCentralManager 

    init() { 
     central = CBCentralManager(delegate: self, queue: nil, options: nil) 
     super.init() 
    } 

    func centralManagerDidUpdateState(central: CBCentralManager!) { } 
} 

Ben super.init() önce central = çizgi koyarsanız, o zaman hata alıyorum

Kafam karıştı. Bunu nasıl yaparım?

cevap

15

geçici bir çözüm yüzden centralnil ilk

class BrowserSample: NSObject, CBCentralManagerDelegate { 
    var central : CBCentralManager! 

    init() { 
     super.init() 
     central = CBCentralManager(delegate: self, queue: nil, options: nil) 
    } 

    func centralManagerDidUpdateState(central: CBCentralManager!) { } 
} 

başlatılır kullanımı ImplicitlyUnwrappedOptional veya siz

class BrowserSample: NSObject, CBCentralManagerDelegate { 
    @lazy var central : CBCentralManager = CBCentralManager(delegate: self, queue: nil, options: nil) 

    init() { 
     super.init() 
    } 

    func centralManagerDidUpdateState(central: CBCentralManager!) { } 
} 
+1

@lazy Çok @lazy hakkında takdir deneyebilirsiniz. İyi –

+0

CBCentralManager ile tembel kullanımı bazı durumlarda kötü bir fikirdir çünkü bluetooth radyosunun başlatılması biraz zaman alır. – asdf