[英]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.