gpt4 book ai didi

ios - 在 Swift 中使用 Hashable 扩展 @objc 协议(protocol)

转载 作者:搜寻专家 更新时间:2023-10-31 19:27:29 27 4
gpt4 key购买 nike

我有一个带有这个实现的@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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com