gpt4 book ai didi

swift - == 和 : in swift extension where condition 有什么区别

转载 作者:搜寻专家 更新时间:2023-11-01 06:34:27 25 4
gpt4 key购买 nike

我有一个关于 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!

所以,我必须同时扩展 ==:同时实现相同的功能?

最佳答案

当使用 时: 您正在为符合特定协议(protocol)或继承指定类的类型编写扩展。

当使用 = 时,您正在为特定类型编写扩展,在您的情况下为 Racer

您可以在文档中阅读更多信息 here .

编辑:

一个区别是,当您使用 = 时,类型必须匹配,这意味着数组的元素类型必须Racer .这就是为什么 Array[Human] 没有得到扩展方法,因为类型不是 Racer 实际上是 Human

您不需要 2 个方法,您可以将第一个方法更改为使用 : 而不是 =。符合Racer协议(protocol)就够了,不需要是Racer类型。

关于swift - == 和 : in swift extension where condition 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43087411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com