C言語(Objective-C)では、例えば二重ループからbreakで一気に抜ける事はできず、
- フラグを立てて抜ける(冗長)
- ループ箇所をまとめて関数化して
return
で抜ける -
goto
で抜ける(嫌われがちですが、この場合においては有用だと個人的には思います) -
for
やwhile
の条件式で弾かれる値をループカウンタ等に突っ込む(ちょっと危険)
などなど工夫して抜けていたと思いますが、Swiftだとfor
やwhile
の前にラベルを書いておく事で簡単に多重ループからbreakできるようです。
サンプルコード
println("start!")
for_i: for i in 1...5 {
for j in 1...5 {
println("i=\(i) j=\(j)")
if i == 2 && j == 2 {
println("break for_i")
break for_i
}
}
}
println("end!")
実行結果
start!
i=1 j=1
i=1 j=2
i=1 j=3
i=1 j=4
i=1 j=5
i=2 j=1
i=2 j=2
break for_i
end!
for
ループ中のswitch-case
の中で外側のfor
に対してbreak
する事もできますので、覚えておくといざという時に役立つ予感です。
このラベル付けによる制御はfor
, while
, switch
構文に対して、それぞれbreak
, continue
が出来るようです。
どうやらJavaでは同等の事が出来ていたようですので、この多重break(?)に対する既知の問題や論争などありましたらコメント頂ければ幸いです。