0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SwiftのOptionalのmapメソッドについて(Unwrapとして使うmapメソッド)

Last updated at Posted at 2019-12-01

Optional型のArrayのmapメソッドを使う際、mapの扱いを見落として使ってしまいがちだったので、戒めのためにメモ

@koherさんの記事「ArrayとOptionalのmapは同じです」で

Optional や Array を値を入れる箱だと考えると、 map は箱から値を取り出さずに操作するためのメソッド/関数です

という概念で理解できました。

配列の中身を一つづつ、処理しようと、以下のように書くと

let numbers: [Int]?
numbers = [1, 2, 3, 4]
numbers.map {
    print($0)
}

結果は
print($0) // [1, 2, 3, 4]
になります。

これは
Optional型に、mapメソッドを通した場合
Unwrapの処理が行われ、Optional型 → 非Optional型になるからです。

期待する動作(配列の中身を一つづつ処理する)をしたい場合は、以下です

let texts: [String]?
numbers.map {
    print($0) // [1, 2, 3, 4]
    let update_numbers = $0.map {
        $0 + 2
    }
    print(update_numbers) // [3, 4, 5, 6]
}

これは、

if let numbers = numbers {
    print(numbers) // [1, 2, 3, 4]
    let update_numbers = numbers.map {
        $0 + 2
    }
    print(update_numbers) // [3, 4, 5, 6]
}

と同じ動作をします

違いは
前者のmapでのUnwrapは、箱から値を取り出さずに操作
後者のif letでのUnwrapは、一旦、変数に代入して、if文の中で操作
という違いで、特に大きな違いはないので、好みでいいのかと思いますが
自分は前者の方がスッキリして、見やすいかなと思います。
ただ、後者は何をやってるのかは、パッと見で分かりやすいので
レビュー者との共通認識で、どちらかを使うか決めた方が良さそうです。

0
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?