我试图扩展一系列符合浮点数的元素来计算平均值。
extension Collection where Element: FloatingPoint {
func sum() -> Element {
return reduce(0, +)
}
func average() -> Element {
return sum() / Int(count)
}
}
sum()
工作正常但average()
有错误。
二元运算符' /'不能应用于类型的操作数 ' Self.Element'和' Int'
我不确定为什么会这样。 Self.Element
是FloatingPoint
。我希望能够分开这个。
(我也意识到这是一个被零除的问题,但我稍后会解决这个问题。)
答案 0 :(得分:3)
你平均没有用,因为你试图将一些FloatingPoint
类型除以整数。使用Element(count)
创建相同类型的新元素进行划分。
extension Collection where Element: FloatingPoint {
func sum() -> Element {
return reduce(0, +)
}
func average() -> Element {
guard !isEmpty else { return 0 }
return sum() / Element(count)
}
}
这是有效的,因为FloatingPoint
协议声明了初始化程序,
public init(_ value: Int)
这适用于Swift 4.1,因为count是Int。对于早期版本的Swift使用,
extension Collection where Element: FloatingPoint {
func sum() -> Element {
return reduce(0, +)
}
func average() -> Element {
guard !isEmpty else { return 0 }
return sum() / Element(Int(count))
}
}