我正在用XCode 12 beta 2编写一个iOS应用程序,我被卡住了,因为我需要从Firebase读取一些数据。默认情况下,我从Firebase文档中获取了代码,并添加了一些内容:
Auth.auth().signIn(withEmail: email, password: password) { (result, error) in
print("Logged in!")
// Loading Database
var ref: DatabaseReference!
ref = Database.database().reference()
let userID = Auth.auth().currentUser?.uid
ref.child("users").child(userID!).observeSingleEvent(of: .value, with: { (snapshot) in
// Get user values
let value = snapshot.value as? NSDictionary
let dataFirstname = value?["firstname"] as? String ?? ""
let dataLastname = value?["lastname"] as? String ?? ""
// Setup labels
self.namesLabel.text = "(dataFirstname) (dataLastname)"
self.passwordLabel.text = self.password
self.emailLabel.text = self.email
}) { (error) in
print(error.localizedDescription)
}
}
问题在于;dataFirstname";以及";dataLastname";不是从数据库中获取的。问题似乎来自于";设值="我在调试代码时看到的。我还是Swift的新手,如果有任何帮助,我们将不胜感激!谢谢你的阅读,我希望你能帮助我!--最大
如果snapshot.value
不能表示为NSDictionary(在Swift中有点不推荐使用(,则会得到nil
。
查看正确类型的最快方法是记录对象:print(snapshot.value)
您还可以添加断点并检查内容
所以我成功地正确读取了数据。对于那些对此感兴趣的人,这是我的最后一条代码。感谢所有帮助我的人!
// Loggin-in
Auth.auth().signIn(withEmail: email, password: password) { (result, error) in
if error != nil {
// Couldn't log-in
self.alertUser("Error", error!.localizedDescription)
} else {
print("Logged in!")
// Loading Database
let userID = Auth.auth().currentUser?.uid
let db = Firestore.firestore()
let ref = db.collection("users").document(userID!)
ref.getDocument { (document, error) in
if let document = document, document.exists {
var dataDescription = document.data()
print("Document data: (dataDescription)")
// Get values from data
self.FirstName = dataDescription?.removeValue(forKey: "firstname") as! String
self.LastName = dataDescription?.removeValue(forKey: "lastname") as! String
// Setup labels
self.namesLabel.text = "(self.FirstName) (self.LastName)"
self.passwordLabel.text = self.password
self.emailLabel.text = self.email
} else {
print("Document does not exist")
}
}
}
}