代码:
treasures
在上面的代码中,我们在(mapRect: MKMapRect, treasure: Treasure)
数组上运行reduce函数,在闭包中传递了两个参数:treasures
。闭包如何知道第二个参数将是{{1}}数组中的元素,第一个参数将是此闭包返回的结果?
默认情况下,闭包中传递的第二个参数是否是执行reduce函数的数组中的元素?
答案 0 :(得分:2)
Swift的数组类的reduce
定义很可能看起来像这样:
func reduce<T>(initial: T, fn: (T, T) -> T) -> T {
var val = initial
for e in self {
val = fn(val, e)
}
return e
}
也就是说,reduce
的定义决定了参数传递给你提供的闭包的顺序。
请注意,Swift reduce
的实际定义比我上面提供的更复杂,但上面的例子是基本要点。
答案 1 :(得分:1)
如果你看一下reduce的定义:
func reduce<S : SequenceType, U>(sequence: S, initial: U, combine: @noescape (U, S.Generator.Element) -> U) -> U
闭包的第一个参数是结果,第二个参数是序列的元素。