extension Array {
// map里面的入参是一个闭包:
// T = Target 目标元素
// Element = 任意入参元素
func accumulate<T>(_ initial: T , _ nextAccumulate: (T , Element) -> T) -> Array<T> {
let array : Array<T> = self.map { element -> T in
// 返回的是每一个新处理之后的元素:
// 而这里我把这个新处理的方式用闭包的形式让外部去处理
// 我在这里只做调用!
// 我在函数的内部只做方法的调用 , 而方法的具体实现我以接口的形式暴露出去
// 让外部开发者去调用~
return nextAccumulate(initial, element)
}
return array
}
}
外部调用:
let fibonacci = [0 , 1 , 2 , 3 , 5]
let result = fibonacci.accumulate(0) { $0 + $1 }
print("result = \(result)")