LoginSignup
0
0

More than 5 years have passed since last update.

Swift2.2でforループの挙動が違う

Posted at

Swift2.2で、自動でdeprecatedのコードを変更した時、挙動が違います。

var array = [1,2,3,4,5,6,7,8,9,10]
for var i=0;i<array.count;i++ {
    print(array[i])

    if(i==5){
        array.removeAtIndex(5)
    }
}

このコードはdeprecatedと出ます。
なので、クリックして、リターンを押して自動で以下のように変更しました。

var array = [1,2,3,4,5,6,7,8,9,10]
for i in 0 ..< array.count {
    print(array[i])

    if(i==5){
        array.removeAtIndex(5)
    }
}

すると、例外が発生します。

なぜなら、前者のコードでは、array.removeAtIndex(5)によって、arrayの数が減っているので、forの行にあるarray.countの数が減ります。
しかし、後者のコードでは、forの行にあるarray.countの数が減りません。
なので、存在しないindexの配列の要素にアクセスしてしまいます。
なので、注意が必要です。バグの発生源になるので注意しましょう。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0