斯威夫特:减少关闭

时间:2015-05-31 22:22:59

标签: swift reduce

代码:

treasures

在上面的代码中,我们在(mapRect: MKMapRect, treasure: Treasure)数组上运行reduce函数,在闭包中传递了两个参数:treasures。闭包如何知道第二个参数将是{{1}}数组中的元素,第一个参数将是此闭包返回的结果?

默认情况下,闭包中传递的第二个参数是否是执行reduce函数的数组中的元素?

2 个答案:

答案 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

闭包的第一个参数是结果,第二个参数是序列的元素。