我正在使用 Swift 5.7 新功能,并尝试实现一些异构集。
我已将代码简化为这个简单的游乐场:
protocol Stuff: Hashable {
var identifier: String { get }
}
struct StuffA: Stuff {
let identifier: String
func hash(into hasher: inout Hasher) {
hasher.combine(identifier)
}
}
struct StuffB: Stuff {
let identifier: String
func hash(into hasher: inout Hasher) {
hasher.combine(identifier)
}
}
var arrayOfStuff: Array<any Stuff> = []
arrayOfStuff.append(StuffA(identifier: "a"))
arrayOfStuff.append(StuffB(identifier: "b"))
// Works like a charm
var setOfStuff: Set<any Stuff> = Set()
// error: Type 'any Stuff' cannot conform to 'Hashable'
setOfStuff.insert(StuffA(identifier: "a"))
setOfStuff.insert(StuffB(identifier: "b"))
第一次尝试Array<any Stuff>
shows any
可以与协议一起使用来指定通用约束。
第二次尝试失败,因为 swift 无法检查 Hashable 一致性。我知道Stuff
does not符合Hashable,它只是inherits从。但是你如何告诉编译器any Stuff
会遵守吗?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)