【发布时间】:2020-09-21 16:14:11
【问题描述】:
我正在尝试获取一组员工并等待它完成。
尝试使用DispatchGroup,但似乎什么也没发生。
有一个二维数组,第一个是关于员工的,第二个是关于他成功收到的文件的。然后,它应该将ShiftConst 对象附加到请求的数组中。
我希望它通过使用前面的完成块来通知它何时完成。
我得到的结果是 0 并且“没有完成”。
这是我的代码:
@Published var employeesConst = [ShiftConst]()
func getAllShiftConsts(employees: [Employee], completion: @escaping (Bool) -> () = {_ in}){
let group = DispatchGroup()
var finish = false
for employee in employees{
let ref = self.session.db.collection(CollectionRef.users.rawValue).document(employee.uid!).collection(CollectionRef.shiftConsts.rawValue)
ref.getDocuments { (qSnapshot, error) in
guard let qSnapshot = qSnapshot, !qSnapshot.isEmpty else {return}
for document in qSnapshot.documents{
group.enter()
do{
let data = try document.decode(as: ShiftConst.self)
self.employeesConst.append(data)
finish = true
group.leave()
}catch let error{
finish = false
group.leave()
print(error)
}
}
}
}
group.notify(queue: .main) {
completion(finish)
}
}
用法:
getAllShiftConsts(employees: session.employeesList) { finish in
if finish {
print("finish")
print("Count: ", self.employeesConst.count)
}else{
print("didn't finish")
print("Count: ", self.employeesConst.count)
}
}
完成后我想用它来做这个:
for (index, symbol) in self.date.weekDaySymbols.enumerated(){
let day = Day(date: self.date.nextWeek[index], isSelected: false, hasShifts: false, daySymbol: symbol, dayNumber: self.date.nextWeekNumbers[index])
day.setShifts(morning: self.session.employeesList, middle: self.session.employeesList, evening: self.session.employeesList)
for const in self.employeesConst{
if const.dateToString() == day.date{
for shift in day.shifts{
if shift.type == const.shiftType{
shift.filterEmployees(shiftConsts: const)
}
}
}
}
if index == 0 {day.isSelected = true}
self.week.append(day)
}
【问题讨论】:
标签: arrays swift firebase swiftui