8 comments

[ 3.1 ms ] story [ 30.5 ms ] thread
If you're learning Swift, I'm building a database of Swift resources to make the process easier.

http://www.h4labs.com/dev/ios/swift.html

And I just posted it to HN here:

https://news.ycombinator.com/item?id=8815739

this is a great collection. Thanks!
"So a generator is simply something that can give you the next element of some sequence of elements."

Is this a common usage of the word "generator"?

At least in JavaScript and Python you'd call that an "iterator", and a "generator" is a special type of function that acts as an iterator, using the "yield" keyword.

A generator is an iterator created and returned by a generator function.
the Sequence / Generator pattern in swift is analogous to IEnumerable, IEnumerator in .net, though I've found it's harder to implement.
Yes indeed. Swift lacks the "yield return" statement of C#. Yet you can do well with "SequenceOf" and "GeneratorOf".

// Fibonacci sequence

let fib = SequenceOf { () -> GeneratorOf<Int> in

    var a = 0, b = 1

    return GeneratorOf {
        () -> Int? in
        let c = a + b
        a = b
        b = c
        return a
    }
}

// Print Fibonacci numbers <= 1000

for e in fib {

    if e > 1000 {
        break
    }

    print(" \(e)")
}

println()

$ xcrun swift fib_test.swift

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

See http://www.oki-osk.jp/esc/swift/linq.html