Сначала добро пожаловать на сайт.
Это асинхронный вызов c, который означает, что блок строки запроса (collectionRef.whereField(...
) будет выполняться после строки return returnedData
.
Пожалуйста, проверьте эту среднюю статью -> Управление асинхронным c кодом в 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)
}