閉区間演算子`...`は、両端の値を含みます。
```swift
for i in 1...5 {
print(i) // 1, 2, 3, 4, 5
}
```
これは`for-in`で最もよく使われる範囲です。
半開区間:a..<b
半開区間`..<`は上限を含みません。0始まりのインデックスに最適です。
```swift
for i in 0..<5 {
print(i) // 0, 1, 2, 3, 4
}
```
配列のインデックスを反復処理するときに便利です。例:`0..
片側範囲
片側範囲は、範囲の一方の端まで続きます。
```swift
let nums = [10, 20, 30, 40, 50]
for n in nums[2...] { print(n) } // 30, 40, 50
for n in nums[..<3] { print(n) } // 10, 20, 30
```
コレクションを特定の位置から、または特定の位置までスライスするときにとても便利です。
stride(from:to:by:)
カスタムの刻み幅が必要な場合は、`stride`を使用します。
```swift
for i in stride(from: 0, to: 10, by: 2) {
print(i) // 0, 2, 4, 6, 8
}
for i in stride(from: 10, through: 0, by: -3) {
print(i) // 10, 7, 4, 1
}
```
ループ変数を無視する
反復処理の値が必要ない場合は、`_`を使用します。
```swift
var sum = 0
for _ in 1...10 {
sum += 1
}
print(sum) // 10
```
これにより、重要なのはインデックスではなく回数であることを読み手に示せます。
文字列のCharacterを反復処理する
Stringは`Sequence`に準拠しているため、文字を直接反復処理できます。
```swift
for char in "Swift" {
print(char) // S, w, i, f, t
}
```
各`char`の型は`Character`です。
値としての範囲
範囲はSwiftの第一級の値であり、保存できます。
```swift
let valid: ClosedRange = 1...100
if valid.contains(42) {
print("In range")
}
```
入力値の検証や、switchのcaseパターンとの照合に便利です。
ネストしたfor-inループ
多次元の反復処理では、ループをネストできます。
```swift
for row in 1...3 {
for col in 1...3 {
print("(\(row),\(col))", terminator: " ")
}
print()
}
```
深くネストするとO(n²)の計算量になるため、注意してください。
reversedでカウントダウン
`.reversed()`を使うと、範囲を逆順にできます。
```swift
for i in (1...5).reversed() {
print(i) // 5, 4, 3, 2, 1
}
```
または、負の刻み幅を指定した`stride(from:through:by:)`を使用する方法もあります。
はい。「範囲を使ったfor-inループ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。