//--------  swift 集合类型解读 - 1210
/*
  --> Sequence 协议
    这个协议是内置集合类型的核心,正是它让 针对元素序列的通用操作 成为可能
    其规定了要实现跟返回一个 迭代器(Iterator)
    protocol Sequence {
        associatedtype Iterator: IteratorProtocol // 这里使用了 关联类型,作用就是协议中的 “范型” 或者 “alias”
        func makeIterator() -> Iterator
    }
    --> IteratorProtocol 协议,一般只有在自定义序列类型的时候才使用
    protocol IteratorProtocol {
        associatedtype Element
        mutating func next() -> Element?
    }
 
    for element in someSequence {
        doSomething(with: element)
    }
 
     实际上就是,我想试用过FMDB的对此不会陌生:
    var iterator = someSequence.makeIterator()
        while let element = iterator.next() {
        doSomething(with: element)
    }
 */


// 一个更加有意义的例子,模拟一个 Fibslterator
struct Filbslterator: IteratorProtocol {
    var state = (0, 1)
    typealias Element = Int
    mutating func next() -> Element? {
        let upcomingNumber = state.0
        state = (state.1, state.0 + state.1)
        return upcomingNumber
    }
}

var iterator = Filbslterator()
while let x = iterator.next() {
    if(x > 100) {
        break
    }
    print(x)
}