9. Swift 惰性计算.png

    函数式编程的核心是函数,函数是“头等公民”。这就像面向对象语言的核心是类。Swift 中的函数具有函数式语言中的函数的所有特点。这种支持使得开发者可以很容易地使用 Swift 写出函数式风格的代码。

    惰性计算是函数式编程语言的一个特性。在使用惰性计算时,表达式不在它被绑定到变量之后就立即求值,而是在该值被调用的时候求值。与延迟存储属性有点类似。

    1. let res = 1...3
    2. let seq = res.lazy.map {(i: Int) -> Int in
    3. print("mapping \(i)")
    4. return i * 2
    5. }
    6. print(type(of: seq)) // LazyMapCollection<ClosedRange<Int>, Int>
    7. for i in seq {
    8. print(i)
    9. }
    10. // mapping 1
    11. // 2
    12. // mapping 2
    13. // 4
    14. // mapping 3
    15. // 6

    菲波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34

    1. class FibonacciGenerator: GeneratorType {
    2. typealias Element = Int
    3. var current = 0, nextValue = 1
    4. func next() -> Element? {
    5. print("NEXT: ", current, nextValue)
    6. let ret = current
    7. current = nextValue
    8. nextValue += ret
    9. return ret
    10. }
    11. }
    12. var generator = FibonacciGenerator()
    13. for _ in 1..<10 {
    14. print(generator.next()!)
    15. }

    参考: