ich von iOS-nRF-Toolboxeine Bequemlichkeit initializer Erweiterung für Objective-C-Klasse Hinzufügen zu
Klasse ScannedPeripheral enthält einen Initialisierer
+ (ScannedPeripheral*) initWithPeripheral:(CBPeripheral*)peripheral rssi:(int)RSSI isPeripheralConnected:(BOOL)isConnected NS_REFINED_FOR_SWIFT;
ich es wie dieses
in Swift verwenden einige Code in Swift verwendet werden anrufenScannedPeripheral.initWithPeripheral(peripheral, rssi: 0, isPeripheralConnected: true)
Aber es sieht nicht gut aus. Wie macht Apple seine Cocoa-API?
Ich versuchte, die initializer mit NS_REFINED_FOR_SWIFT
und fügt eine Swift-Erweiterung zu markieren:
extension ScannedPeripheral {
convenience init(peripheral: CBPeripheral, rssi: Int32, isPeripheralConnected: Bool) {
ScannedPeripheral.__initWithPeripheral(peripheral, rssi: rssi, isPeripheralConnected: isPeripheralConnected);
}
}
Aber jetzt ein Fehler sagt Self.init isn't called on all paths before returning from initializer
.
Hallo, ist es eine statische Methode, den folgenden Code verwenden wird es funktionieren. –
Es ist eine statische Funktion (Klassenfunktion), wir können keine Instanzeigenschaften (self) in statischen Funktionen verwenden. –
OK es sollte automatisch konvertiert werden Swift ohne Funktion wird in "init blah" umbenannt. Der Grund dafür ist, dass es sich um statische Methoden handelt, die wahrscheinlich nicht sehr orthodox sind. – huggie