Label
ラベル
break文やcontinue文の制御の移動先の指定ができる機能
labelなし
for element in [1,2,3] {
print("element: \(element)")
for nestedElement in [1,2,3] {
print("nestedElement: \(nestedElement)")
break
}
}
出力結果
element: 1
nestedElement: 1
element: 2
nestedElement: 1
element: 3
nestedElement: 1
こちらはbreakの制御範囲がnestedElementに限られているので、3回実行されました。
labelあり
label: for element in [1,2,3] {
for nestedElement in [1,2,3] {
print("for文")
break label
}
}
これだとwarningが出るかもしれないので
element → _
にするとでなくなりました。
nestedElement → _
出力結果
for文
なぜこのような挙動をするのか??
break ラベル名
とすることにより、labelに指定した場所によって変化するので、
今回はlabelが1回目のループの外にあったので一気に2つのループを抜けたということになります。
補足
for element in [1,2,3] {
label: for nestedElement in [1,2,3] {
print("for文")
break label
}
}
出力結果
for文
for文
for文
こんなことも実装できます。
c言語のgoto文と同じように書けます。