

Swift Standard Library: Generators, Sequences and Collections - joubert
http://iosdeveloperzone.com/2014/10/13/swift-standard-library-generators-sequences-and-collections/

======
melling
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](http://www.h4labs.com/dev/ios/swift.html)

And I just posted it to HN here:

[https://news.ycombinator.com/item?id=8815739](https://news.ycombinator.com/item?id=8815739)

~~~
wkcamp
Could you perhaps add this to Github so others can make contributions to the
database?

~~~
melling
I probably should create an input screen, etc. I'm not familiar with
AppEngine's datastore though. Anyway, I put the tsv on github.

[https://github.com/melling/SwiftResource](https://github.com/melling/SwiftResource)

The data is here:

[https://github.com/melling/SwiftResource/blob/master/swift_u...](https://github.com/melling/SwiftResource/blob/master/swift_urls.tsv)

For this to work, I probably need scripts to prevent duplicates, etc.

------
tlrobinson
_" 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.

~~~
nickfargo
A _generator_ is an iterator created and returned by a _generator function_.

------
bigdubs
the Sequence / Generator pattern in swift is analogous to IEnumerable,
IEnumerator in .net, though I've found it's harder to implement.

~~~
suzuki
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](http://www.oki-
osk.jp/esc/swift/linq.html)

