我是 Swift 新手。我正在尝试返回一个包含来自 firebase 查询的数据的数组;但是,我认为关闭会引起问题。我尝试将返回数组放在函数的两侧,并使用 self.在封闭范围内;但是,没有骰子。
下面是我的代码:
//controls avatar collection view in the mainViewController
import Foundation
import Firebase
class AvatarModel{
//connect to firestore
let db=Firestore.firestore()
func getAvatars() -> [Avatar]{
//set array to two dimensional string array...I tried putting this on both sides of the function using self. within the closure...
var generatedAvatarArray=[Avatar]()
//query firebase database
db.collection("mainViewController").whereField("long", isGreaterThanOrEqualTo: -5).whereField("long", isLessThanOrEqualTo: 5).getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for documents in querySnapshot!.documents {
//parse JSON and prepare data to be added to array
let JSON=documents.data()
let avatar=Avatar()
avatar.fileName=JSON["thumbImage"] as! String
avatar.userName=JSON["partName"] as! String
//add db data to array to be returned by function
generatedAvatarArray.append(avatar)
}
}
//print statement works. Array is filled with db data from firestore.
print("%%%\(generatedAvatarArray[0].userName)++++\(generatedAvatarArray[1].userName)")
}
//blank array here. no db data from firestore.
return generatedAvatarArray
}
最佳答案
闭包异步运行。这意味着该方法直接返回一个空的“generatedAvatarArray”。
您可以尝试使用委托(delegate)模式将闭包内部的结果传递给调用方法。
关于swift - 在 Swift 问题中使用 Firebase 查询中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59344210/