struct BoxedFibonacciSequence: Sequence, IteratorProtocol
{
typealias Element = Int
var currentIndex = 0
mutating func next() -> Int? {
defer { currentIndex += 1 }
return loadFibNumber(at: currentIndex)
}
func makeIterator() -> Self {
return self
}
}
func loadFibNumber(at index: Int) -> Int {
return fibNumber(at: index)
}
var box = BoxedFibonacciSequence()
for v in box {
print("for index",box.currentIndex)
if v < 20 {
} else {
break
}
}
let fib = BoxedFibonacciSequence()
var iter = fib.makeIterator()
while let v = iter.next() {
print("while index",iter.currentIndex)
if v < 20 {
} else {
break
}
}
//out put:
//for index 0
//for index 0
//for index 0
//for index 0
//for index 0
//for index 0
//for index 0
//for index 0
//for index 0
//while index 1
//while index 2
//while index 3
//while index 4
//while index 5
//while index 6
//while index 7
//while index 8
//while index 9
1
0
392