Firestore を実際にいじれる環境ではないので、擬似的なコードでの実装例ですが、このような感じになるとおもいます(擬似的なコードですが、以下のコードそのものは Playground でも実行できます)。
Swift
1import UIKit
2
3var videoIds: [String] = []
4
5func fetchFirestoreVideoId() {
6 // usreRef.getDocument の代わり
7 // 1秒後にデータベースからレスポンスが来たと仮定
8 DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
9 // 実行結果から推測した仮想的なデータ
10 let dataDescription = ["videoId": NSArray(array: ["vRsbUlPmjqY", "zNO0kxTClYo", "EW02WW4yTRU"])]
11
12 print("Document data: (dataDescription)")
13
14 // NSArray を Array にダウンキャストする
15 if let array = dataDescription["videoId"] {
16 videoIds = array as? [String] ?? []
17 }
18
19 print("(1)inside closure:", videoIds)
20 }
21 print("(2)outside closure:", videoIds)
22}
23
24// 実行
25fetchFirestoreVideoId()
ただし、気をつけなければいけないのはvideoIds
への代入タイミングです。
usreRef.getDocument
に渡しているクロージャは、実際は非同期処理となるため、クロージャ外でデータを処理しようとしても思ったような処理になりませんのでご注意ください。
Console
1(2)outside closure: []
2Document data: ["videoId": <__NSArrayI 0x6000014c73c0>(
3vRsbUlPmjqY,
4zNO0kxTClYo,
5EW02WW4yTRU
6)
7]
8(1)inside closure: ["vRsbUlPmjqY", "zNO0kxTClYo", "EW02WW4yTRU"]