はじめに
次のような、Optionalで包まれた要素をもつArrayがあるとします。
このArrayに対して、ループの中でnilでない要素をunwrapして処理を実行する状況を考えます。
let items: [Int?] = [1, 3, nil, 6, 10, nil, nil, 8]
このような処理の書き方を、初めて知ったやり方もあったので、4種類ほど紹介してみます。
4種類とも処理の結果は同じになります。
実行したSwiftバージョン
- Swift 5.1
書き方
▼ 単純なループ
ループしながらguardでnilを弾いてみます
for i in items {
guard let item = i else {
continue
}
print(item)
}
// ↓出力結果
// 1
// 3
// 6
// 10
// 8
▼ Enumeration Case Pattern
Enumeration Case Pattern によるパターンマッチング
for case .some(let item) in items {
print(item)
}
// ↓出力結果
// 1
// 3
// 6
// 10
// 8
▼ Optional Pattern
Optional Pattern によるパターンマッチング
for case let item? in items {
print(item)
}
// ↓出力結果
// 1
// 3
// 6
// 10
// 8
▼ Functional
関数型で書いてみます
items.compactMap({ $0 }).forEach({ print($0) })
// ↓出力結果
// 1
// 3
// 6
// 10
// 8
おわりに
きっと他にもいろんな書き方ができるんだろうな〜と思います。
間違いなどありましたらご指摘ください
参考