2014-06-26 7 views
8

Ich habe den folgenden Code:Wie übergebe ich Self an Initialisierer während der Initialisierung eines Objekts in 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!) { } 
} 

Wenn ich vor super.init() die central = Spiel setzen, dann bekomme ich den Fehler:

self used before super.init() call 

Wenn ich es nach setzen, erhalte ich die Fehlermeldung:

Property self.central not initialized at super.init call 

Also, ich bin verwirrt. Wie mache ich das?

Antwort

15

eine Abhilfe ist die Verwendung ImplicitlyUnwrappedOptional so central mit nil ersten

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

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

    func centralManagerDidUpdateState(central: CBCentralManager!) { } 
} 

oder Sie können versuchen @lazy

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

    init() { 
     super.init() 
    } 

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

Sehr etwa @lazy zu schätzen wissen. Gut –

+0

Die Verwendung von faul mit CBCentralManager ist in einigen Situationen eine schlechte Idee, da es einige Zeit braucht, um Bluetooth-Radio initialisiert zu bekommen – asdf

Verwandte Themen