使用Swift中的Hashable扩展@objc协议

时间:2018-03-26 09:33:26

标签: ios objective-c 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 protocol' Document'无法改进非@ objc协议' Hashable'

此协议用作@objc方法中的属性,我希望将其保留为' @ objc'方法,因为它是@objc委托协议的一部分。

此协议如下所示:

@objc public protocol MyClassDelegate: class {

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

}

有什么想法吗?

1 个答案:

答案 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

  

不要将协议用作词典中的键。它永远不会顺利   所有的解决方法都很痛苦。

我可能没有完美回答,但希望这会让错误消失。