gpt4 book ai didi

ios - 对泛型类型使用算术运算符(+、-、/、*)

转载 作者:行者123 更新时间:2023-11-28 10:00:06 25 4
gpt4 key购买 nike

我有一个类使用通用类型 T 作为内部数组的问题,它可以是 IntDoubleaverage 函数应计算数组中所有 IntDouble 值的平均值。

class MathStatistics<T: Comparable> {
var numbers = [T]()

func average() -> Double? {
if numbers.count == 0 {
return nil
}

var sum:T

for value in numbers {
sum = sum + value
}

return (sum / numbers.count)
}
}

Xcode 在以下行报告错误:

sum = sum + 值二元运算符 '+' 不能应用两个 T 运算符

返回(总和/numbers.count)找不到接受提供的参数的“/”的重载

最佳答案

为此,您需要创建一个新的协议(protocol),让 Swift 知道 T 的任何实例都可以对其执行数字运算符,例如:

protocol NumericType: Equatable, Comparable {
func +(lhs: Self, rhs: Self) -> Self
func -(lhs: Self, rhs: Self) -> Self
func *(lhs: Self, rhs: Self) -> Self
func /(lhs: Self, rhs: Self) -> Self
func %(lhs: Self, rhs: Self) -> Self
init(_ v: Int)
}

extension Double : NumericType {}
extension Int : NumericType {}

来源:What protocol should be adopted by a Type for a generic function to take any number type as an argument in Swift?

现在,当您定义 MathStatistics 类时:

class MathStatistics<T: NumericType> {
var numbers = [T]()

func average() -> T? {
if numbers.count == 0 {
return nil
}

let sum = numbers.reduce(T(0)) { $0 + $1 }
return sum / T(numbers.count)
}
}

现在您可以像这样使用 MathsStatistics:

let stats = MathStatistics<Int>()
stats.numbers = [1, 3, 5]
println(stats.average()) // Prints: Optional(3)

关于ios - 对泛型类型使用算术运算符(+、-、/、*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29953388/

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