ループとイテレータ
ここでは Swift でのループについてみていきましょう。
ループを扱うにあたり、配列、ディクショナリといったコレクションについては、あらかじめ知っておいたほうが良いので、まだの人はみておいてください。
» コレクション
尚、以下の例では println で標準出力にプリントしていますが、Xcode の Playground で試すときは、アシスタントエディタを表示しておくと、コンソールの出力が見られるので便利です。
while, do-while ループ
while ループは while で指定した条件が真のときに、{ } ブロック内の処理を繰り返します。
var i = 0
while i < 10 {
print( "\(i)" )
i += 1
}
実行結果:
0 1 2 3 4 5 6 7 8 9
初期の Swift ではインクリメントに i++ という書き方がありましたが、現在はなくなりました。
do-while ループは、{ } ブロック内の処理を実行してから while の条件を評価して、真ならば処理を繰り返します。
var i = 0
repeat {
print( "\(i)" )
i += 1
} while i < 10
実行結果は上と同様です。
初期の Swift では do-while という書き方がありましたが、現在は repeat-while です。
for-in ループ
for-in ループではコレクションの要素を取り出しながら、繰り返し処理を行ないます。
var states = [ "CA", "HI", "TX" ]
for state in states {
print( state )
}
実行結果:
CA HI TX
配列のインデックスを取得する場合は、enumerated() 関数とタプルを利用して、次のようにします。
var states = [ "CA", "HI", "TX" ]
for (index, name) in states.enumerated() {
print( "\(index) = \(name)" )
}
実行結果:
0 = CA 1 = HI 2 = TX
以前は enumerate(< 配列 >) 関数が使えましたが、今は 配列.enumerated() です。
ディクショナリと for-in ループで次のようにキー・バリューペアが取得できます。
var addr = [
"state" : "California",
"city" : "Los Angeles",
]
for ( key, val ) in addr {
print( "key = \(key), val = \(val)" )
}
実行結果
key = state, val = California key = city, val = Los Angeles
カウンタの省略
最後に Swift らしい感じの使い方をひとつ紹介します。
for-in ループで、3 回ループさせる場合、次のように 3 ドット (...) を使って次のようにかけます。
for i in 1...3 {
print ( "Hello! \(i)" )
}
ループの中で i を使わないなら、アンダースコア (_) を使って省略します。
for _ in 1...3 {
print ( "Hello!" )
}