我正在制作一个考勤应用程序,我试图显示登录时间、注销时间和休息时间等日期范围内的值。例如,用户选择从 2017 年 9 月 23 日到 2017 年 9 月 25 日的日期,应用应显示这些日期的登录时间、注销时间、休息时间等列表。
这是我的代码:
databaseHandle = ref.child("admin").child(userID!).child("employees").child(self.employeeInfo!).child("attendance").queryOrdered(byChild: fromDateTimeStamp!).queryEnding(atValue: toDateTimeStamp).observe(.childAdded, with: { (snapshot) in
for item in snapshot.children {
let snap = item as! DataSnapshot
let key = snap.key
let value = snap.value
print("key: \(key), value: \(value!)")
}
})
ref.removeObserver(withHandle: databaseHandle!)
我选择了 9/23/2017 到 9/25/2017 因为在 9/24/2017 没有登录和注销,这是我尝试查询时得到的:
key: breakFinish, value: 12:17 PM
key: breakStart, value: 11:55 AM
key: currentDate, value: 9/23/2017
key: login, value: 11:51 AM
key: logout, value: 1:00 PM
key: scanCount, value: 4
key: breakFinish, value: 10:19 AM
key: breakStart, value: 10:19 AM
key: currentDate, value: 9/25/2017
key: login, value: 10:18 AM
key: logout, value: 10:21 AM
key: scanCount, value: 4
现在,我的问题是如何循环遍历 snapshot.children 或访问单个值以使用它?因为我要将这些数据导出到一个 csv 文件中。所以当我这样做时,我希望它像这样显示:
Date Login Break Start Break Finish Logout
9/23/2017 11:51 AM 11:55 AM 11:55 AM 1:00 PM
9/25/2017 11:51 AM 11:55 AM 11:55 AM 1:00 PM
我试过了,但找不到值时会报错。
let attendanceDict = snapshot.value as? [String:AnyObject]
if let actualAttendanceDict = attendanceDict {
for each in actualAttendanceDict {
let dateKey = each.key
self.dateKeyArray += [dateKey]
let dateLogin = each.value["currentDate"] as! String
self.dateLoginArray += [dateLogin]
let timeInTime = each.value["login"] as! String
self.loginTimeArray += [timeInTime]
let timeOutTime = each.value["logout"] as! String
self.logoutTimeArray += [timeOutTime]
let breakStartTime = each.value["breakStart"] as! String
self.breakStartTimeArray += [breakStartTime]
let breakFinishTime = each.value["breakFinish"] as! String
self.breakFinishTimeArray += [breakFinishTime]
}
}
请帮忙。谢谢!
最佳答案
诀窍是在 for 循环内部转换为字典:
databaseHandle = ref.child("admin").child(userID!).child("employees").child(self.employeeInfo!).child("attendance").queryOrdered(byChild: fromDateTimeStamp!).queryEnding(atValue: toDateTimeStamp).observe(.childAdded, with: { (snapshot) in
for item in snapshot.children {
let snap = item as! DataSnapshot
let dateKey = snap.key
let attendanceDict = snap.value as? [String:AnyObject]
self.dateKeyArray += [dateKey]
let dateLogin = attendanceDict["currentDate"] as! String
self.dateLoginArray += [dateLogin]
let timeInTime = attendanceDict["login"] as! String
self.loginTimeArray += [timeInTime]
let timeOutTime = attendanceDict["logout"] as! String
self.logoutTimeArray += [timeOutTime]
let breakStartTime = attendanceDict["breakStart"] as! String
self.breakStartTimeArray += [breakStartTime]
let breakFinishTime = attendanceDict["breakFinish"] as! String
self.breakFinishTimeArray += [breakFinishTime]
}
})
关于iOS Swift - 从 Firebase 中的日期范围查询值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46398281/