【发布时间】:2020-06-30 21:07:44
【问题描述】:
我想获取一段时间内每天记录的“件数”并将其相加,因此我使用了一个 for 循环并遍历该时间段。但是,它似乎是在异步执行以下操作,因此只返回 0。这是我的代码:
func getPiecesInPeriod(period: Int, uid: String) -> Int{
//period = #days
var pieces = 0
for i in 0..<period {
let date = Date().addingTimeInterval(TimeInterval(-86400*i))
Firestore.firestore().collection("Users").document(uid).collection("Log").document(getDayMonthYear(date: date)!).getDocument() {(document, err) in
if let err = err {
print("Error getting documents: \(err)")
} else if document?.get("total pieces") != nil {
pieces += document!.get("total pieces") as! Int
}
}
}
return pieces
}
我尝试使用完成处理程序:
func getPiecesInPeriod(period: Int, uid: String, completion: @escaping (Int) -> Void) {
//period = #days
var pieces = 0
for i in 0..<period {
let date = Date().addingTimeInterval(TimeInterval(-86400*i))
Firestore.firestore().collection("Users").document(uid).collection("Log").document(getDayMonthYear(date: date)!).getDocument() {(document, err) in
if let err = err {
print("Error getting documents: \(err)")
} else if document?.get("total pieces") != nil {
pieces += document!.get("total pieces") as! Int
print(document?.documentID)
print(pieces)
}
completion(pieces)
}
}
}
但无论我将“完成(件)”这一行放在哪里,它似乎都不起作用。有什么想法吗?
【问题讨论】:
标签: swift firebase asynchronous completionhandler