类型'Self'不符合协议'Hashable'

时间:2018-01-23 21:07:12

标签: swift enums protocols

当使用扩展为所有符合要求的枚举实现类型方法时,我正在努力解决“类型'Self'不符合协议'Hashable'”的错误消息,如下所示:

 for i in range(1000):
    if hasattr(np,'uint'+str(i)):
        x='uint'+str(i) 

>>x
Out[662]: 'uint64'

另一方面,当我通过将我的方法参数的数组键类型编码为Enum而不是在每个枚举中使用协议和扩展来实现该方法时:

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
}

....

等等......我没有错误,可以正确使用doSth的方法。但是,我有几十个这样的枚举,当然更喜欢在扩展中实现这个方法。

P.S。实现的目的是使用字典参数调用方法doSth,该字符参数具有枚举的情况,例如:

static func doSth(with dict[First: Any]) 
static func doSth(with dict[Second: Any])

欢迎提出任何建议。

1 个答案:

答案 0 :(得分:2)

使您的协议符合protocol A: Hashable { ...} (这正是错误消息所说的):

[Self: Any]

您的问题是Self: Hashable无效,除非doSth,因此无法定义您的{{1}}方法。