2016-07-28 21 views
1

我試圖將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不是零,但它仍然打印零。我該如何解決這個問題?謝謝!

+5

'snapshot.value [「用戶名」]'將返回nil,如果沒有爲沒有價值字典中的'用戶名'鍵。您應該學會使用調試器和單步執行,而不是依賴日誌語句。 – Paulw11

+0

@ Paulw11你爲什麼沒有發佈這個答案? – Losiowaty

+1

它可能不是答案(好吧,它可能是),但我更願意給提問者一個機會,在發佈答案之前在評論中確認 – Paulw11

回答

0

您目前只是檢查snapshot.value包含任何價值,所以不是nil。但這並不意味着snapshot.value包含值"username"

如果它是空的初始化,它也不是零。

所以要檢查這個特定的鍵,你就必須增加一個檢查的密鑰本身:

if let userValue = snapshot.value?["username"] 
0

您應該使用可選的綁定,讓你想解開的價值...

if let username = snapshot.value?["username"] { 
    // now you can use username safely 
} 
相關問題