我有一个关于Swift扩展的问题:
protocol Racer {
var speed: Double { get }
}
extension Sequence where Iterator.Element == Racer {
func fastest() -> Iterator.Element? {
return self.max(by: { (a: Iterator.Element, b: Iterator.Element) -> Bool in
return a.speed < b.speed
})
}
}
extension Sequence where Iterator.Element: Racer {
func bla() -> Void {
}
}
我想知道它们之间的区别。事实上,类型为
[Racer]
的数组没有bla()
函数。
编辑1:仍有一个问题,假设我们有一个符合Racer
的结构体。
struct Human: Racer {
var speed: Double
}
如果我们有一个
Array<Racer>
:let me = Human(speed: 99999)
let you = Human(speed: 99998)
let arr: [Racer] = [me, you]
// Threre's no problem, we can do this
arr.fastest()
// but
let arr2: [Human] = [me, you]
// this Array won't have the `fastest` function
arr2.fastest() ------> Error!
所以,我必须同时为相同的函数扩展==
和:
吗?
[Racer]
不会有bla()
函数。例如,如果我不使用=
扩展它,[Human(),Dog()] .bla()
将无法正常工作。 - Klein Mioke