2017-09-03 97 views
0

我试图在迅速扩展使用协议依赖注入的ObjC类扩展使用协议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

enter image description here

不知道最新的错误,因为我能够添加另一种方法就好了。

用作参考文章是这个https://medium.com/flawless-app-stories/the-complete-guide-to-network-unit-testing-in-swift-db8b3ee2c327

+0

如果我只是不停的publishString方法都运行良好 –

回答

0

您必须确认协议PopAWSIoTDataManagerProtocol,因为真的类的extensionAWSIoTDataManager

或者你可以试试这个

extension PopAWSIoTDataManagerProtocol where Self: AWSIoTDataManager { 
    ... 
} 
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 

} 

协议的默认行为,当实施时,您必须覆盖所有的方法。这些被分类为协议要求。

有任择议定书要求,不必由符合协议类型来实现。

为了实现可选协议型要求,所述协议要求即可选功能必须被标记为@objc。

+0

你能阐述这个多一点?为什么他们需要是可选的?当原来的课程已经有这些功能? –

+0

当我方才publishString功能,它没有问题的人运行良好 –

+0

它仍然会抛出同样的错误,为对象,以符合PopAWSIoTDataManagerProtocol协议的净化,需要所有的方法来实现。这是默认行为。即使刚刚发布了String,我也收到了错误。 – andyPaul