我有一个@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 protocol' Document'无法改进非@ objc协议' Hashable'
此协议用作@objc
方法中的属性,我希望将其保留为' @ objc'方法,因为它是@objc
委托协议的一部分。
此协议如下所示:
@objc public protocol MyClassDelegate: class {
@objc func methodOne(parameter: [Document: Int])
}
有什么想法吗?
答案 0 :(得分:3)
您可以使用[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
不要将协议用作词典中的键。它永远不会顺利 所有的解决方法都很痛苦。
我可能没有完美回答,但希望这会让错误消失。