tetu式

ゲームと音楽・作曲の自己満足と悩みどころの多いプログラムのブログ。

Xcode Swiftのfor文

今回は繰り返し処理で引っ張りだこのfor文について。
whileもいいんですけどちゃんと文章組まないとうっかり無限ループに
なりがちなので私はfor文使うことが多いです。




前までの記事でちらほら出ているfor文は

for(var i=1; i<10; i++){
    print(i)  // 1〜9まで改行しながら表示
}

という他の言語でもよく使われるタイプのfor文です。

この書き方の他に、Swiftでは in を使ったfor文を書くことができます。

for i in 1...10 {
    print(i)  // 1〜10まで改行しながら表示
}

1...10は範囲演算子と呼ばれる書き方です。
こちらは10まで表示されます。

for i in 1..<10 {
    print(i)  // 1〜9まで改行しながら表示
}


最後のドットを < にすることで1〜9までの範囲でループするようになります。
この2つの書き方、主な違いとして使用するループの変数にあります。

前者のよく見る書き方の場合、for文内で i を書き換えることができます。

for (var i=1; i<10; i++) {
    print(i)  // 1 3 5 7 9が毎回改行されて表示
    i++
}

後者の in を使ったfor文では i は定数となり、ループ内で変更することはできません。

for i in 1...10 {
    print(i)
    i++  // エラー
}

in の後ろに入れる物については範囲演算子以外にも配列やディクショナリを入れられます。
phpでいうforeach的な感じですね。

let study = ["国語": "japanese", "数学": "math", "英語": "english", "社会": "social", "理科": "science"]

for s in study {
    print (s.0 + "の英単語は" + s.1)
}

// 数学の英単語はmath
// 国語の英単語はjapanese
// 英語の英単語はenglish
// 社会の英単語はsocial
// 理科の英単語はscience

名前付けなしで変数のみ入れた場合、sの中身はタプル型になります。
ディクショナリは代入した順番が保証されず、表示しようとすると
国語の方が先に入ってる様に見えますが、数学が先に表示されました。
この辺りは環境によって違うかも・・・?