LoginSignup
1
1

More than 1 year has passed since last update.

Swiftのループチットシート

Last updated at Posted at 2021-05-17

Swift Loops Cheat Sheet (English)

Swift 5.0+で利用可能なループのチートシートです。

For

Swift 3.0以降、Cスタイルの「for」ループは非推奨になりました。しかし、古いコードベースを移行している人々のためにそれも含めます。

For-InでRangeのループ

n回ループ

非推奨Cスタイルバージョン:

Swift_<3.0
for var i = 0; i < 10; i++ {
    print(i)
}

... (閉区間) 演算子で閉区間のfor-inループ:

Swift_>=_3.0
for i in 0...10 {
    print(i)
}

..< (半開区間) 演算子で半開区間のfor-inループ:

Swift_>=_3.0
for i in 0..<10 {
    print(i)
}
逆の順序でn回ループ

非推奨Cスタイルバージョン:

Swift_<3.0
for var i = 10; i > 0; i-- {
    print(i)
}

reversed()を使用して逆転された区間の閉区間のfor-inループ::

Swift_>=_3.0
for i in (1...10).reversed() {
    print(i)
}
ストライドでループ

非推奨Cスタイルバージョン:

Swift_<3.0
for var i = 0; i < 10; i += 2 {
    print(i)
}

stride(from:to:by:)を使用して指定された量でステップする半開区間のfor-inループ:

Swift_>=_3.0
for i in 0.stride(to: 10, by: 2) {
    print(i)
}

Arrayのループ

Arrayの配列値のループ

非推奨Cスタイルバージョン:

Swift_<3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
for var i = 0; i < someNumbers.count; i++ {
    print(someNumbers[i])
}

Arrayのすべての値のfor-inループ:

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
for number in someNumbers {
    print(number)
}

Arrayのすべての値のforEachループ:

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
someNumbers.forEach { number in
    print(number)
}
逆の順序でArrayの配列値のループ

非推奨Cスタイルバージョン:

Swift_<3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
for var i = someNumbers.count - 1; i >= 0; i-- {
    print(someNumbers[i])
}

reversed()を使用して逆転されたArrayのすべての値のfor-inループ:

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
for number in someNumbers.reversed() {
    print(number)
}

reversed()を使用して逆転されたArrayのすべての値のforEachループ:

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
someNumbers.reversed().forEach { number in
    print(number)
}
Arrayのインデックス付きの配列値のループ

非推奨Cスタイルバージョン:

Swift_<3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
for var i = 0; i < someNumbers.count; i++ {
    print("\(i + 1): \(someNumbers[i])")
}

enumerated()を使用して列挙されたArrayのすべての値のfor-inループ:

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
for (index, number) in someNumbers.enumerated() {
    print("\(index + 1): \(number)")
}

enumerated()を使用して列挙されたArrayのすべてのインデックスと値のforEachループ:

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
someNumbers.enumerated().forEach { (index, number) in
    print("\(index + 1): \(number)")
}
Arrayの配列インデックスのループ

非推奨Cスタイルバージョン:

Swift_<3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
for var i = 0; i < someNumbers.count; i++ {
    print(i)
}

indicesを使用して列挙されたArrayのすべてのインデックスのfor-inループ:

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
for index in someNumbers.indices {
    print(index)
}

Dictionaryのループ

Dictionary)のすべてのインデックスと値のfor-inループ:

Swift_>=_3.0
let scores = ["Bob": 42, "Alice": 99, "Jane": 13]

for (name, score) in scores
{
    print("\(name)'s score is \(score)")
}

While

ループの始まりで評価された条件が** false **になるまで、コードを繰り返します。

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
var i = 0
while(i < someNumbers.count) {
    print(someNumbers[i])
    i += 1
}

Repeat-While

ループの終わりで評価された条件が** false **になるまで、コードを繰り返します。

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
var i = 0
repeat {
    print(someNumbers[i])
    i += 1
} while(i < someNumbers.count)

Break

ループの現在の反復を終了し、プログラムのフロー制御がループを終了します。

ラベル無しのbreak

現在の反復を終了し、ループを終了します:

Swift
for i in 1...4{
    if i == 3 {
      break
    }
    print("i = \(i)")
  }
}

アウトプット:

i = 1
i = 2 

アウトプット:break

ラベル付きbreakステートメントでネストされたループを使用する場合、ラベル付きループの現在の反復を終了し、ラベル付きループを終了します:

Swift
outerloop: for i in 1...3{
  innerloop: for j in 1...3 {
    if j == 2 {
      break outerloop
    }
    print("i = \(i), j = \(j)")
  }
}

アウトプット:

i = 1, j = 1

Continue

ループの現在の反復をスキップし、プログラムのフロー制御は次の反復に進みます。

ラベル無しのcontinue

ループの現在の反復をスキップして、次の反復に進みます:

Swift
for i in 1...4{
    if i == 3 {
      continue
    }
    print("i = \(i)")
  }
}

アウトプット:

i = 1
i = 2
i = 4

ラベル付きのcontinue

ラベル付きcontinueステートメントでネストされたループを使用する場合、ラベル付きループの現在の反復をスキップして、次のループに進みます:

Swift
outerloop: for i in 1...3{
  innerloop: for j in 1...3 {
    if j == 2 {
      continue outerloop
    }
    print("i = \(i), j = \(j)")
  }
}

アウトプット:

i = 1, j = 1
i = 2, j = 1
i = 3, j = 1

高階関数

配列を操作する場合、たとえば、各配列要素に関数を適用する場合、または配列を1つの結果に減らす場合は、高階関数を使用する必要があります。

Array.filter(_:)

配列内のすべてのアイテムを反復処理し、条件によってフィルタリングされたすべての要素を含む配列を返します。

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
let numbersUnder10 = someNumbers.filter { $0 < 10 }
print(numbersUnder10)

Array.map(_:)

配列内のすべてのアイテムを反復処理して変換し、変換された要素を含む配列を返します。

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
let doubledNumbers = someNumbers.map { $0 * 2}
print(doubledNumbers)

Array.reduce(_:_:)

配列内のすべてのアイテムを反復処理し、1つの値になるまでそれらを組み合わせます。

Swift_>=_3.0
let someNumbers = [2, 3, 45, 6, 8, 83, 100]
let sum = someNumbers.reduce(0) { $0 + $1}
print(sum)

参照

英語
日本語
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1