2017-09-03 98 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