2016-09-26 33 views
0

我有以下功能觀察我的數據庫的子節點的值解析字典值:無法分配從FIRDatabase

func findUser() { 

    let tempUser = "jordan" 

    let firRef = FIRDatabase.database().reference() 

    let userRef = firRef.child("user-referances") 

    var username:String? 

    userRef.observe(.value, with: { (snapshot) in 

     if let dictionary = snapshot.value as? [String:AnyObject] { 
      print(snapshot) 

      print(dictionary) 
      username = dictionary["username"] as? String 
      //print("usernam) 
      if username == tempUser { 
       print("username exists") 

       print(username) 
       //return 

      }else { 
       print("username not found") 
      } 
     } 

     }) { (error) in 
      print(error) 
    } 
} 

當我嘗試字典值賦給一個字符串,並加以比較,它不分配它。但是,當我打印字典值時,值是在那裏。

console screenshot

回答

0

據我可以理解你的代碼,你正在檢查用戶名是否已經存在。使用它來查找用戶名,而不是迭代所有用戶名。

userRef.child("user-referances").queryOrdered(byChild: "username").queryEqual(toValue: "tempUser").observeSingleEvent(of: .value, with: {(snap) in 


     if let snapDict = snap.value as? [String:AnyObject] { 

      for each in snapDict{ 

       let stringName = each.value["username"] as! String 
       print("username for :\(each.key) is : \(stringName)") 
      } 

     }else{ 

      //That username doesnt exists. 

     } 

    }) 

檢查: - Firebase : If username already exists.

+0

我不一定檢查當前用戶,但我檢查,如果一個值(可以說字符串值)存在於特定的子節點。屏幕截圖顯示該值存在,但我可以將其分配給字符串變量。你的代碼確實讓我回到了我正在尋找的特定用戶,但我不能將字典值賦給字符串或任何變量。 – latipov15

0

我不知道iOS開發,但是當我看到您的控制檯的屏幕截圖,然後看看你的代碼,我想我可能會看到一些錯誤。

您使用print(dictonary),你會得到:

["kszzbjya8HY1IsV1Iek02FKFxtj1": { 
    username = max; 
}, "QW3V9o08zuele3BkfmPCM33m4K52": { 
    username = jordan; 
}] 

這意味着該變量的字典等於數據的整個塊。

然而,然後嘗試說:

username = dictionary["username"] as? String 

難道你必須首先得到每個孩子,並檢查它的用戶名分別?

同樣,我沒有iOS或swift的知識,所以如果我在這裏休息,讓我知道。但除非你把這個值賦給用戶名的那一行是某種Swift自動迭代快照子節點的方式,那麼我認爲這可能是你的問題。