2017-02-24 4 views
2

私が共有インスタンスと、私は、デリゲートを設定し、mqtt.connect()を呼び出すための別の方法を作成することができることを知っているが、ただ知りたいここでプライベートinitメソッドデリゲートをinit関数内で自己に設定する方法は?

class MQTTController:NSObject, CocoaMQTTDelegate { 
     static let sharedInstance = MQTTController() 
     var clientID:String 
     var mqtt:CocoaMQTT 
     private override init() { 
     clientID = "xyz-" + String(ProcessInfo().processIdentifier) 
     mqtt = CocoaMQTT(clientID: clientID, host: "mqttcontroller.mqtt.net", port: 1883) 
     mqtt.username = "myusername" 
     mqtt.password = "mypassword" 
     mqtt.willMessage = CocoaMQTTWill(topic: "/will", message: "dieout") 
     mqtt.keepAlive = 30 
     mqtt.cleanSession = true 
     MQTTController.isConnecting = true 
     mqtt.delegate = self //Error at this Line "'self' used before super.init call" 
     mqtt.connect() 
    } 
} 

でMQTTControllerという名前のクラスは、そのIドンによるいかなる解決策はありき別のメソッドを作成して呼び出す必要があります。

答えて

3

エラーメッセージは、何をする必要があるかをあなたに教えました。あなたのinitでsuper.init()を呼び出す必要があります。

class MQTTController:NSObject, CocoaMQTTDelegate { 
    static let sharedInstance = MQTTController() 
    var clientID:String 
    var mqtt:CocoaMQTT 
    private override init() { 
     clientID = "xyz-" + String(ProcessInfo().processIdentifier) 
     mqtt = CocoaMQTT(clientID: clientID, host: "mqttcontroller.mqtt.net", port: 1883) 
     mqtt.username = "myusername" 
     mqtt.password = "mypassword" 
     mqtt.willMessage = CocoaMQTTWill(topic: "/will", message: "dieout") 
     mqtt.keepAlive = 30 
     mqtt.cleanSession = true 
     MQTTController.isConnecting = true 

     super.init() // This line was missing 

     mqtt.delegate = self 
     mqtt.connect() 
    } 
} 
1

あなたはまた別のオプションのための

class MQTTController:NSObject, CocoaMQTTDelegate { 
    static let sharedInstance = MQTTController() 
    var clientID:String 
    var mqtt:CocoaMQTT 
    private override init() { 
     clientID = "xyz-" + String(ProcessInfo().processIdentifier) 
     mqtt = CocoaMQTT(clientID: clientID, host: "mqttcontroller.mqtt.net", port: 1883) 
     mqtt.username = "myusername" 
     mqtt.password = "mypassword" 
     mqtt.willMessage = CocoaMQTTWill(topic: "/will", message: "dieout") 
     mqtt.keepAlive = 30 
     mqtt.cleanSession = true 
     MQTTController.isConnecting = true 

     defer { 
      mqtt.delegate = self 
      mqtt.connect() 
     } 
    } 
} 
+0

おかげdeferを使用することができますが、super.init()答えて行く必要があります –

関連する問題