关于理解闭包和函数式编程的一点笔记

97 阅读1分钟
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)")