2016-08-10 10 views
2

は、私は逆の順序で反復処理しようとしていますが、whileループでは、無期限と印刷4走る...なぜ、ループはここで無期限に実行されていますか?

func countDown(start: Int) -> AnyIterator<Int> { 
var i = start 
return AnyIterator { 
    guard i > 0 else { return nil } 
    i -= 1 
    return i 
    } 
} 

let i = 5 
while let x = countDown(start: i).next() { 
    print("Element x: \(x)") // It iterates indefinitely. 
} 
+0

おそらく、あなたは 'while'条件でイテレータをいつも再起動しているでしょう – vadian

答えて

1

関数は毎回呼び出されているので、あなたは新しいイテレータ毎回作成しています。

let i = 5 
let it = countDown(start: i) 
while let x = it.next() { 
    print("Element x: \(x)") // It no longer iterates indefinitely. 
} 
関連する問題