LoginSignup
16
11

More than 3 years have passed since last update.

【Swift】Optionalな要素を持つArrayをループでunwrapして使う

Last updated at Posted at 2017-09-12

はじめに

次のような、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

おわりに

きっと他にもいろんな書き方ができるんだろうな〜と思います。
間違いなどありましたらご指摘ください:bow_tone1:

参考

16
11
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
16
11