2016-04-06 137 views
4

我試圖讓用戶通過搜索用戶名來開始遊戲並關注其他用戶。我需要能夠確保具有該用戶名的用戶存在。我使用下面的代碼,但雖然if被稱爲else不應該被調用時,它應該。Swift&Firebase |使用用戶名檢查用戶是否存在

let checkWaitingRef = Firebase(url:"https://test.firebaseio.com/users") 
checkWaitingRef.queryOrderedByChild("username").queryEqualToValue("\(username!)") 
      .observeEventType(.ChildAdded, withBlock: { snapshot in 

    if snapshot.value.valueForKey("username")! as! String == username! { 

    } else { 

    } 

JSON數據樹

{ 
    "097ca4a4-563f-4867ghj0-6209288bd7f02" : { 
     "email" : "[email protected]", 
     "uid" : "097ca4a4-563f-4867ghj0-6209288bd7f02", 
     "username" : "test1", 
     "waiting" : "0" 
    }, 
    "55a8f979-ad0d-438u989u69-aa4a-45adb16175e7" : { 
     "email" : "[email protected]", 
     "uid" : "55a8f979-ad0d-438u989u69-aa4a-45adb16175e7", 
     "username" : "test2", 
     "waiting" : "0" 
    } 
} 
+0

「不過雖然如果叫別人不會被調用時,我想」你是什麼意思嗎? – Khuong

+0

@ khuong291我的意思是if語句是「激活」:'如果snapshot.value.valueForKey(「username」)!如!字符串==用戶名! {「但即使應該這個else語句也不會做任何事情。 –

+0

它是正確的,因爲如果語句是真的,那麼else語句永遠不會被執行。 – Khuong

回答

6

簡單的解決辦法:

不要使用.childAdded作爲塊將不執行查詢的時候沒有發現任何東西。

而是使用.value的時間併爲您NSNull

let checkWaitingRef = Firebase(url:"https://test.firebaseio.com/users") 
    checkWaitingRef.queryOrderedByChild("username").queryEqualToValue("\(username!)") 
       .observeEventType(.Value, withBlock: { snapshot in 

      if (snapshot.value is NSNull) { 
       print("not found)") 

      } else { 
       print(snapshot.value) 
      } 
    } 
+0

我測試了這種方法,但回調函數被多次調用。所以在輸出部分,我得到「未找到」,然後快照值...不知道如何得到只有一個結果 – franswa

+0

你有其他錯誤,因爲.value讀取節點的全部內容,所以它不會被稱爲多次 - 除非你正在修改節點。您也可以執行observeSingleEventOfType。 – Jay

+0

是的,我一定是做錯了什麼事情......我昨天花了整個晚上一直在努力,呃,但現在它似乎像你說的那樣工作 – franswa