Mar*_*tin 13 generics protocols swift
我正在使用 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"))
Run Code Online (Sandbox Code Playgroud)
第一次尝试Array<any Stuff>显示any可以与协议一起使用来指定通用约束。
第二次尝试失败,因为 swift 无法检查 Hashable 一致性。我知道它Stuff不符合Hashable,它只是继承自。但是你如何告诉编译器any Stuff将遵循这一点呢?