繁体   English   中英

为在Swift中使用的Objective-C类添加便捷的初始化程序扩展

[英]Adding an convenience initializer extension for Objective-C class to be used in Swift

我使用iOS-nRF-Toolbox中的一些代码

ScannedPeripheral类包含一个初始化程序

+ (ScannedPeripheral*) initWithPeripheral:(CBPeripheral*)peripheral rssi:(int)RSSI isPeripheralConnected:(BOOL)isConnected NS_REFINED_FOR_SWIFT;

我可以这样在Swift中调用它

ScannedPeripheral.initWithPeripheral(peripheral, rssi: 0, isPeripheralConnected: true)

但这看起来并不好。 苹果如何采取可可API?

我试图用NS_REFINED_FOR_SWIFT标记初始化程序,并添加了Swift扩展名:

extension ScannedPeripheral {
    convenience init(peripheral: CBPeripheral, rssi: Int32, isPeripheralConnected: Bool) {
        ScannedPeripheral.__initWithPeripheral(peripheral, rssi: rssi, isPeripheralConnected: isPeripheralConnected);
    }
}

但是现在出现一个错误,指出Self.init isn't called on all paths before returning from initializer

我认为最好为ScannedPeripheral而不是扩展编写子类,因为扩展可能不支持初始化程序和重写方法。

样品

class SubClassScannedPeripheral: ScannedPeripheral {
  override class func initWithPeripheral(peripheral: CBPeripheral, rssi: Int32, isPeripheralConnected: Bool) -> ScannedPeripheral {
   return ScannedPeripheral.initWithPeripheral(peripheral, rssi: rssi, isPeripheralConnected: isPeripheralConnected);
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM