swift - 如何从 firebase 检索数据并显示特定数据?
问题描述
我正在设置一个函数,允许用户检索他们存储在数据库中的数据。当用户输入数据的值时,当信息已经存储在数据库中时,它会检查并向用户显示数据。如何通过搜索“icNumber”检索数据并显示该子值下的所有数据?
这是我要实现的目标的屏幕截图。
最后,这是我的代码
func displayRecord() {
//guard let uid = Auth.auth().currentUser?.uid else { return }
Database.database().reference().child("Patient_Data").observeSingleEvent(of: .value) { (snapshot) in
guard let name = snapshot.value as? String else { return }
guard let icNumber = snapshot.value as? String else { return }
guard let gender = snapshot.value as? String else { return }
guard let phoneNumber = snapshot.value as? String else { return }
guard let medicationAllergic = snapshot.value as? String else { return }
guard let smokerRecord = snapshot.value as? String else { return }
self.welcomeLabel.text = "Name, \(name)"
self.welcomeLabel.text = "IC Number, \(icNumber)"
self.welcomeLabel.text = "Gender, \(gender)"
self.welcomeLabel.text = "Phone Number, \(phoneNumber)"
self.welcomeLabel.text = "Medication Allergic, \(medicationAllergic)"
self.welcomeLabel.text = "Smoker Record, \(smokerRecord)"
UIView.animate(withDuration: 0.5, animations: {
self.welcomeLabel.alpha = 1
})
}
}
解决方案
您可能希望更改displayRecord
方法以获取条目 ID(“-Lq_y67Rndy3BLyaKA7Q”),这样您一次只能看到一个条目,而不是系统中每个患者的数据。然后,您需要将快照值转换为与数据库中存储的类型匹配的字典。那是guard let dict = snapshot.value as? [String:String] else { return }
行。
func displayRecord(entryId: String) {
Database.database().reference().child("Patient_Data/\(entryId)").observeSingleEvent(of: .value) { (snapshot) in
guard let dict = snapshot.value as? [String:String] else { return }
let name = dict["name"]
let icNumber = dict["icNumber"]
let gender = dict["gender"]
let phoneNumber = dict["phoneNumber"]
let medicationAllergic = dict["medicationAllergic"]
self.welcomeLabel.text = "Name, \(name)"
self.welcomeLabel.text = "IC Number, \(icNumber)"
self.welcomeLabel.text = "Gender, \(gender)"
self.welcomeLabel.text = "Phone Number, \(phoneNumber)"
self.welcomeLabel.text = "Medication Allergic, \(medicationAllergic)"
self.welcomeLabel.text = "Smoker Record, \(smokerRecord)"
UIView.animate(withDuration: 0.5, animations: {
self.welcomeLabel.alpha = 1
})
}
}
您似乎认为您的快照的值将是 type String
。这一定是您将值转换为字符串和多个属性的原因(即使您的快照值是字符串,这样做也没有意义)。
您可能还想考虑是否所有这些值都应在后端存储为字符串。
推荐阅读
- authentication - Netflix Zuul 2 API 网关认证/请求验证方法(无 Spring)
- python-3.x - 如何将 Pandas 字符串列拆分为不同的行?
- python - Counting steps in Python
- wordpress - 无法弄清楚是什么减少了正文部分的全宽
- c - 为什么使用此代码创建的文本文件具有 charset == 二进制文件?
- ios - 减少 UILabel 之间的间距(垂直位置不明确)
- javascript - Change font of suggested actions buttons in webchat control
- ubuntu - 无法使用 puppeteer 将 Rial Symbol 打印为 PDF
- html - CSS - 即使在缩小网站格式后,如何让背景图片始终占据全宽?
- ios - 检测airplay设备是否可用