我有一个带有这个实现的@objc
协议(protocol):
@objc public protocol Document: class {
var data: Data? { get }
var image: UIImage? { get }
func generatePreview()
}
我正尝试在 [Document: Int]
字典中使用它,但自然会出现此错误:
Type 'Document' does not conform to protocol 'Hashable'
问题是我不知道如何让它符合 Hashable
,因为它是一个 @objc
协议(protocol),而 Hashable
是仅在 Swift 中可用。如果我尝试使其符合 Hashable
,我会收到此错误:
@objc protocol 'Document' cannot refine non-@objc protocol 'Hashable'
此协议(protocol)用作 @objc
方法中的属性,我想将其保留为“@objc”方法,因为它是 @objc
的一部分委托(delegate)协议(protocol)。
这个协议(protocol)看起来像这样:
@objc public protocol MyClassDelegate: class {
@objc func methodOne(parameter: [Document: Int])
}
有什么想法吗?
最佳答案
您可以使用 [AnyHashable: Int]
,这是一个类型删除的可哈希值。
我假设你有一个名为 Document 的协议(protocol):
@objc public protocol Document: class {
var data: Data? { get }
var image: UIImage? { get }
func generatePreview()
}
并且您的协议(protocol) methodOne 将接受 [AnyHashable: Int]:
@objc public protocol MyClassDelegate: class {
@objc func methodOne(parameter: [AnyHashable: Int])
}
这个问题有点复杂,经过一些研究我同意@Rob Napier
don't use protocols as keys in dictionaries. It never goes well and all the workarounds are a pain.
我的回答可能不是很完美,但希望这能让错误消失。
关于ios - 在 Swift 中使用 Hashable 扩展 @objc 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49488189/