【发布时间】:2018-01-23 21:07:12
【问题描述】:
当使用扩展为所有符合要求的枚举实现类型方法时,我遇到了“类型'Self'不符合协议'Hashable'”的错误消息,如下所示:
protocol A {
static func doSth(with dict[Self: Any])
}
extension A where Self: RawRepresentable, Self.RawValue == Int {
static func doSth(with dict[Self: Any]) {
for (key, value) in dict { //...do something
}
}
enum First: Int, A {
case f1, f2, f3
}
enum Second: Int, A {
case s1, s2, s3
}
....
另一方面,当我通过将我的方法参数的数组键类型编码为 Enum 来实现该方法而不在每个枚举中使用协议和扩展时:
static func doSth(with dict[First: Any])
static func doSth(with dict[Second: Any])
等等...我没有错误,可以正确使用doSth的方法。然而,我有几十个这样的枚举,当然更喜欢在扩展中实现这个方法。
附:实现的目的是调用doSth方法,字典参数有一个来自枚举案例的键,例如:
First.doSth(with: [.f1: "good", .f2:"better"]
欢迎提出任何建议。
【问题讨论】: