[iOS swift] swift3 の for ループでインデックスをループ内でインクリメントしたいとき

2016/05/9

こんにちは。きんくまです。

Xcodeの7.3からswift3に向けての警告が出るようになりました。
だいたいこちらに書かれている通りに変更するとうまくいきました。

>> 既存アプリの Xcode 7.3 + Swift 2.2 対応

それで、こういう感じにループのインデックスをループの中でインクリメントしたいことがありまして。

for var i:Int = 0; i < 10; i++ {
    print("c style: \(i)")
    if i % 2 == 0 {
        i++ //こういうやつ
    }
}

出力はこうなります。

c style: 0
c style: 2
c style: 4
c style: 6
c style: 8

ただ、これだとCスタイルのforループだからダメだよと警告が出ます。(えー!)
これをswfit3に沿って書き直すとこうなるかなとやってみたのですが、、。

for var i:Int in 0 ..< 10 {
    print("for in: \(i)")
    if i % 2 == 0 {
        i += 1
    }
}

出力はこうなります。

for in: 0
for in: 1
for in: 2
for in: 3
for in: 4
for in: 5
for in: 6
for in: 7
for in: 8
for in: 9

for in スタイルだとあくまでも 0 ..< 10 の配列というか範囲Rangeに対してのループになるみたいで、ループの中でインデックスを変更しても関係ないみたいです。 なので、仕方がないのでこうやって書きました。なんだかCスタイルの方がスマートな気がしますが、きっとswift3では中でインデックスを変更するというのは想定していないのだと思います。むー

var i:Int = -1
let len:Int = 10
for j in 0 ..< len {
    if i < j {
        i = j
    }else{
        continue
    }
    if i >= len {
        break
    }
    print("for in ver2:  \(i)")
    if i % 2 == 0 {
        i += 1
    }
}

出力はこうなります。

for in ver2:  0
for in ver2:  2
for in ver2:  4
for in ver2:  6
for in ver2:  8

というメモでした。

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

LINEスタンプ作りました!
毎日使える。とぼけたウサギ。LINEスタンプ販売中! 毎日使える。とぼけたウサギ

ページトップへ戻る