首页 > 解决方案 > 如何从 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
            })
        }
    }

标签: swiftfirebasefirebase-realtime-database

解决方案


您可能希望更改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。这一定是您将值转换为字符串和多个属性的原因(即使您的快照值是字符串,这样做也没有意义)。

您可能还想考虑是否所有这些值都应在后端存储为字符串。


推荐阅读