[英]Issues summing up array using for loop in swift
我正在嘗試迭代一個數組並使用泛型來總結所有值,如下所示:
func reduceDaArray <T, U>(a: [T], startingValue: U, summed: (U, T) -> U) -> U {
var sum = 0
for number in a {
sum = sum + number
}
return sum
}
reduceDaArray([2,3,4,5,6], 2, +) //(22)
它給了我以下錯誤:
關於行sum = sum + number
Binary operator '+' cannot be applied to operands of type 'Int' and 'A'
sum = sum + number
和
關於行return sum
Int is not convertible to 'U'
我知道這可以通過reduce方法更好地完成,但是我想使用迭代完成任務來實現這個實例。 為什么會出現這些錯誤? 我從未明確表示T是Int。
在reduceDaArray()
函數中,
var sum = 0
聲明一個整數而不是使用給定的startingValue
。 和
sum = sum + number
嘗試將泛型數組元素添加到該整數,而不是使用給定的summed
閉包。
所以你可能意味着什么
func reduceDaArray <T, U>(a: [T], startingValue: U, summed: (U, T) -> U) -> U {
var sum = startingValue
for number in a {
sum = summed(sum, number)
}
return sum
}
編譯和按預期工作:
let x = reduceDaArray([2, 3, 4, 5, 6], 2, +)
println(x) // 22
let y = reduceDaArray([1.1, 2.2], 3.3, *)
println(y) // 7.986
let z = reduceDaArray(["bar", "baz"], "foo") { $0 + "-" + $1 }
println(z) // foo-bar-baz
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.