gpt4 book ai didi

内容匹配特定协议(protocol)的数组上的 Swift 运算符, "where"关键字用法

转载 作者:搜寻专家 更新时间:2023-10-31 22:10:33 25 4
gpt4 key购买 nike

我正在尝试创建一个适用于所有 Array 的 Swift 运算符仅包含 Numeric 的 s元素,它应该看起来像这样:

prefix operator ∑
prefix func ∑ (array: Array<T>) -> T where T == Numeric {
var sum: T = 0
for item in array {
sum += item
}
return sum
}

但这是编译器错误 ( error: 'where' clause cannot be attached to a non-generic declaration )

当然,我可以用以下形式编写许多函数:

prefix operator ∑
prefix func ∑ (array: Array<Double>) -> Double {
var sum: Double = 0
for item in array {
sum += item
}
return sum
}

这行得通,但泛型的意义在于我不必这样做。

这可能是因为我不明白如何使用“where”关键字,但我发现很难搜索这样一个(没有双关语意)通用词,因为我得到了太多不相关的结果。

编辑:

我不会写prefix func ∑ (array: Array<Numeric>) -> Numeric {因为 Swift 不知道如何编译 sum += item .

最佳答案

您可以约束通用类型为 Numeric通过输入 <T: Numeric> ,因此函数的签名将是:

func ∑ <T: Numeric>(array: Array<T>) -> T

我还建议使用 reduce(_:_:) 完成这样一个任务的方法:

prefix operator ∑
prefix func ∑ <T: Numeric>(array: Array<T>) -> T {
return array.reduce(0, +)
}

// calling:
let array = Array(repeating: 1, count: 20)
let summation = ∑array // 20

有关泛型类型约束的更多信息,您可以查看 official documentation .

关于内容匹配特定协议(protocol)的数组上的 Swift 运算符, "where"关键字用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47109522/

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