当使用扩展为所有符合要求的枚举实现类型方法时,我正在努力解决“类型'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])
欢迎提出任何建议。
答案 0 :(得分:2)
使您的协议符合protocol A: Hashable { ...}
(这正是错误消息所说的):
[Self: Any]
您的问题是Self: Hashable
无效,除非doSth
,因此无法定义您的{{1}}方法。