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(?)に対する既知の問題や論争などありましたらコメント頂ければ幸いです。