In your reduceDaArray() function
var sum = 0
declares an integer instead of using the given startingValue . AND
sum = sum + number
tries to add a shared array to this integer, instead of using the given summed closure.
So what you probably meant
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 }
which compiles and works as expected:
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
source share