70908
swift firestore のデータ取得について質問をさせていただきます。

### 実現したいこと

簡単な動画再生アプリを作成しております。お気に入りの動画のvideoIdをfirestoreに保存までしていて、お気に入り画面で保存したvideoIdを用い、お気に入りにした動画を見れるようにしたいと思っております。

### 不明点

videoId取得後、配列に格納したvideoIdを順番にAPIリクエストを行うためにどのように書いていくのが良いか。

よろしくお願いいたします。

**環境**  
Xcode 12  
iOS 14

```

    //firestoreのvideoIdを配列に格納
    private var videoIds: [String] = []
    
    //firestoreのvideoIdを取得
    func fetchFirestoreVideoId(){
        let db = Firestore.firestore()
        guard let uid = Auth.auth().currentUser?.uid else { return }
        let userRef = Firestore.firestore().collection(Const.UserPath).document(uid)
        userRef.getDocument { (document, error) in
            if let document = document, document.exists {
                let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
                print("Document data: \(dataDescription)")
                // DocumentにあるvideoIdを配列に格納したい
    
    
            } else {
                print("Document does not exist")
            }
        }
    }
    
        //②Youtube検索情報を取得
    private func fetchYoutubeSerachInfo() {
    
        // videoIdを取得した後、YoutubeAPIリクエストのパラメーターとして取り出したvideoIdを入れたい
        let params = ["q": "q4NPu-bfxrE"]
    
        API.shared.request(path: .search, params: params, type: Video.self) { (video) in
            self.videoItems = video.items
            let id = self.videoItems[0].snippet.channelId
            self.fetchYoutubeChannelInfo(id: id)
        }
    }
    
```

参考にしたドキュメント: [firebase 公式](https://firebase.google.com/docs/firestore/query-
data/get-data#get_a_document)

* * *

[![firestore](https://i.stack.imgur.com/5pg0C.png)](https://i.stack.imgur.com/5pg0C.png)

**videoId取得後、配列に格納したvideoIdを順番にAPIリクエストを行う**  
[![videoId取得後、配列に格納したvideoIdを順番にAPIリクエストを行う](https://i.stack.imgur.com/Qu1Jm.png)](https://i.stack.imgur.com/Qu1Jm.png)

質問が重複しているとの指摘を伺いましたので、質問内容を修正いたしました。
CC BY-SA 4.0
2020-10-01T15:02:34.190
70871
2020-10-04T16:57:24.143
2020-10-02T12:15:59.927
38107
38107
question
swift firebase array
swift firestore 取得データでAPIリクエストをしたい
自己解決いたしました。documentのdataの中にある"videoId"を配列として取得、for文で取得したvideoIdを順番にAPIリクエストをかけて、結果を取得しました。

```

    //FireStoreのvideoIdを配列に格納
    private var videoIds: [String] = []
    
    //firestoreのvideoIdを取得
    private func fetchFirestoreVideoId(){
    
        guard let uid = Auth.auth().currentUser?.uid else { return }
        let userRef = Firestore.firestore().collection(Const.UserPath).document(uid)
    
        userRef.getDocument { [self] (document, error) in
            if let document = document, document.exists {
                let userDic = document.data()
    
                //documentのdataの中にある"videoId"を配列として取得
                if let videoIds: [String] = userDic!["videoId"] as? [String] {
                    // videoIdsの要素であるvideoIdを取り出しAPIリクエスト
                    for videoId in videoIds {
                        //取得したvideoIdをもとにYoutube検索情報を取得
                        fetchYoutubeSerachInfo(videoId: videoId)
                    }
                }
            } else {
                print("Document does not exist")
            }
        }
    }
    
        //Youtube検索情報を取得
    private func fetchYoutubeSerachInfo(videoId: String) {
    
        // videoIdを取得した後、YoutubeAPIリクエストのパラメーターとして実行
        let params = ["q": videoId]
    
        API.shared.request(path: .search, params: params, type: Video.self) { (video) in
            self.videoItems = video.items
            let id = self.videoItems[0].snippet.channelId
            self.fetchYoutubeChannelInfo(id: id)
        }
    }
    
```
CC BY-SA 4.0
2020-10-04T16:57:24.143
70908
2020-10-04T16:57:24.143
38107
70871
answer