簡體   English   中英

使用Swift中的Hashable擴展@objc協議

[英]Extend @objc protocol with Hashable in Swift

我有一個@objc協議與此實現:

@objc public protocol Document: class {
   var data: Data? { get }
   var image: UIImage? { get }

   func generatePreview()
} 

我正試圖在[Document: Int]字典中使用它,但自然我得到了這個錯誤:

類型'文檔'不符合協議'Hashable'

問題是我不知道如何使它符合Hashable ,因為它是@objc協議而且Hashable僅在Swift中可用。 如果我嘗試使其符合Hashable ,我會收到此錯誤:

@objc協議'文檔'無法優化非@objc協議'Hashable'

該協議用作@objc方法中的屬性,我想將其保留為'@objc'方法,因為它是@objc委托協議的一部分。

該協議如下所示:

@objc public protocol MyClassDelegate: class {

    @objc func methodOne(parameter: [Document: Int])

}

任何的想法?

您可以使用[AnyHashable: Int] ,它是類型擦除的可哈希值。

我假設您有一個名為Document的協議:

@objc public protocol Document: class {
    var data: Data? { get }
    var image: UIImage? { get }

    func generatePreview()
}

並且您的協議方法一將接受[AnyHashable:Int]:

@objc public protocol MyClassDelegate: class {

     @objc func methodOne(parameter: [AnyHashable: Int])

}

這是一個復雜的問題,經過一些研究我同意@Rob Napier

不要將協議用作詞典中的鍵。 它永遠不會順利,所有的變通方法都是痛苦的。

我可能沒有完美回答,但希望這會讓錯誤消失。

暫無
暫無

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

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