[英]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.