检查无零件后意外发现零

时间:2016-07-28 22:36:13

标签: ios swift firebase null

我正在尝试将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 4log in 4.1,但不会打印4.2。必须在两者之间的行上发生错误。我检查snapshot.value是不是没有,但它仍然打印为零。我该如何解决这个问题?谢谢!

2 个答案:

答案 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"]