簡體   English   中英

無法快速使用協議擴展ObjC類

[英]Not able to extend ObjC class using Protocol in swift

我正在嘗試使用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 {

}

注意下面的錯誤提示我完全相同的功能要添加到擴展中,而我已經添加到主協議中了

在此處輸入圖片說明

不知道出什么問題了,因為我能夠添加另一種方法就好了。

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

您必須確認協議PopAWSIoTDataManagerProtocol ,因為它是類AWSIoTDataManager extension

或者你可以嘗試一下

extension PopAWSIoTDataManagerProtocol where Self: AWSIoTDataManager {
  ...
}

您定義的協議具有全部功能,必須執行。

您需要將它們定義為可選。 您可以將它們定義為可選,也可以實施所有這些,這正是您所附加的錯誤圖像所要求的。

@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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM