我有一个数据库,该数据库存储一系列由用户每天输入的整数值,并存储为整数列表。我有以下代码查询数据库,并将搜索到的症状值存储到列表中,然后从函数中返回该列表,同时通过for循环returnData似乎包含数据库中的所有值,但是当我放置{ {1}}在查询之后和return语句之前,将打印一个空列表。我不太确定为什么for循环没有正确地附加到returnData列表中。
print(returnedData)
答案 0 :(得分:0)
首先欢迎您访问该网站。
这是一个异步调用,这意味着查询行的(collectionRef.whereField(...
)块将在return returnedData
行之后执行。
请查看这篇中等文章-> Managing async code in Swift
您可以这样传递closure
到您的函数中->
func yearDataReturn(year: Int,symptom: String, completion: @escaping ([Int] -> Void)) {
//fetches all the year for the month and returns it as a list
let collectionRef = db.collection("entries")
var returnedData:[Int] = []
collectionRef.whereField("year", isEqualTo: year).whereField("UserID", isEqualTo: UserDefaults.standard.integer(forKey: "UserID")).order(by: "monthOfYear").order(by: "weekOfMonth").order(by: "dayOfMonth")
.getDocuments{(QuerySnapshot,err)in
for doc in QuerySnapshot!.documents{
let sympLis=doc.get("SymptomValues") as! [Int]
let symp=sympLis[self.symptoms.firstIndex(of: symptom)!]
returnedData.append(symp)
}
completion(returnedData)
}
}
用法
yearDataReturn(year: 5, symptom: "asdf") { symptomValues in
print(symptomValues)
}