見出し画像

【Swift】mapとは?解説と使い方!

こんにちはシオンです。

今回は僕のたまにみるけど理解を後回しにしてあるシリーズのmapについてです!

mapはよく配列の周りで見かけることが多いですが、実際にどんなことに使われているのか。解説と使い方をまとめていきます。


■mapとは?使うタイミングと効果

mapを使うタイミングはずばり
「配列の中身一個一個に同じ処理を施したいとき」
です。

例えば「配列の数値全てを2倍にしたい」という時は

let array = [1,2,3,4,5]                  //初期配列
let newArray = array.map { $0 * 2 }      //全要素を2倍

このように記述します!書き方はこのように

①map{   }で囲む。
②$0が各要素になるので施したい処理を記述。


という感じです。

■少し発展:FirebaseでgetDocumentsしたデータを配列に入れる

これは僕が一番最初にmapに遭遇した場所なので、備忘録程度にメモしておきます。(Firebaseを使ったことがない人はスルーしてください^^;)

Firebase初心者の頃はここで結構つまずいた記憶があるので参考になれば幸いです!

以下解説とコードになります。

//最終的にできたデータを入れる用
class testData:NSObject {
    var data1:String?
    var data2:Int?
    
    init(document: QueryDocumentSnapshot) {
        let Dic = document.data()            //ドキュメントは[String:Any]のディクショナリ型配列になっている
        self.data1 = Dic["str"] as? String
        self.data2 = Dic["int"] as? Int
    }
}
//最終的にできたデータを入れる用
var dataArray:[testData?] = []  

//リファレンス(データがある場所)を指定
let Ref = Firestore.firestore().collection("コレクション名").whereField("フィールド名",isEqualTo: "データ"))

//指定した場所からデータを取ってくる
Ref.getDocuments() { (data, error) in
    if let error = error {
        print("DEBUG_PRINT: snapshotの取得が失敗しました。 \(error)")
        return
    }
        <下記に解説を置いています>
    self.dataArray = data!.documents.map { document in
    let setData = testData(document: document)
    return setData
    }

<解説>
やりたいことは取ってきたデータを一つ一つtestData型に変換して配列にしたい。
以下手順:
①取得したデータは上記の(data,error)のdataに入っている
②このdataにはドキュメントデータが配列になって入っている。
③この配列になっているドキュメントデータを全て同じ形に変換する(ここでmap!)
④要素一つの変換後データがsetData、これはtestData型になっている。
⑤これをdataにreturnで戻して次の要素へ・・・以下ループ。

こんな感じになります。少し説明が下手かな...

こちらでも解説しているのでわかりにくかった場合は参考にしてみてください!

■まとめ

mapは便利。でも最初は手を出しにくい。
身に付けましょう!

この記事が気に入ったらサポートをしてみませんか?