我正在尝试使用swift中的协议扩展一个用于依赖注入的ObjC类,这个类不归我所有,所以我无法进行更改。对于其中一种方法,它的工作但对于其他Xcode总是说该类没有确认协议并建议我将该方法添加到扩展
以下是ObjC标题中的声明
- (BOOL) subscribeToTopic:(NSString *)topic
QoS:(AWSIoTMQTTQoS)qos
extendedCallback:(AWSIoTMQTTExtendedNewMessageBlock)callback;
这是协议及其扩展
protocol PopAWSIoTDataManagerProtocol {
func publishString(_ data:String, onTopic:String, QoS:AWSIoTMQTTQoS) -> Bool
func subscribeToTopic(_ topic: String, qoS: AWSIoTMQTTQoS, extendedCallback: (NSObject, String, Data) -> Void) -> Bool
}
extension AWSIoTDataManager : PopAWSIoTDataManagerProtocol {
}
注意下面的错误表明我将完全相同的func添加到我已经添加到主协议的扩展中
不确定什么是错的,因为我能够添加另一种方法就好了。
答案 0 :(得分:0)
您必须确认协议PopAWSIoTDataManagerProtocol
,因为它extension
AWSIoTDataManager
或者你可以试试这个
extension PopAWSIoTDataManagerProtocol where Self: AWSIoTDataManager {
...
}
答案 1 :(得分:0)
您定义的协议具有强制实施的所有功能。
您需要将它们定义为可选项。要么将它们定义为可选项,要么实现它们所附带的所有错误图像。
@objc protocol PopAWSIoTDataManagerProtocol {
@objc optional func publishString(_ data:String, onTopic:String, QoS:AWSIoTMQTTQoS) -> Bool
@objc optional func subscribeToTopic(_ topic: String, qoS: AWSIoTMQTTQoS, extendedCallback: (NSObject, String, Data) -> Void) -> Bool
}
协议的默认行为,实现时必须覆盖所有方法。这些被归类为协议要求。
有可选的协议要求,不必由符合协议的类型实现。
要达到可选的Protcol要求,协议和要求,即可选功能必须标记为@objc。