我正在尝试将Firebase用户名保存到UserDefault。这就是我所拥有的:
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("Users").child((FIRAuth.auth()?.currentUser?.uid)!).observe(.value, with: { (snapshot) in
print("log in 4")
print(snapshot.value)
if snapshot.value != nil {
print("log in 4.1")
UserDefaults.standard.set(snapshot.value!["username"], forKey: "username")//Crash probably occurs here
print("log in 4.2")
}
})
系统会打印log in 4
和log in 4.1
,但不会打印4.2。必须在两者之间的行上发生错误。我检查snapshot.value
是不是没有,但它仍然打印为零。我该如何解决这个问题?谢谢!
答案 0 :(得分:0)
您应该使用可选绑定来获取要解包的值...
if let username = snapshot.value?["username"] {
// now you can use username safely
}
答案 1 :(得分:0)
您目前只是检查snapshot.value
是否包含任何值,因此不是nil
。但这并不意味着snapshot.value
包含值"username"
。
如果初始化为空,则也不是零。
因此,要检查此特定密钥,您必须添加对密钥本身的检查:
if let userValue = snapshot.value?["username"]