斯威夫特& Firebase |检查用户是否存在用户名

时间:2016-04-06 05:17:27

标签: swift firebase snapshot firebase-realtime-database

我正在尝试允许用户通过搜索用户名来启动游戏并关注其他用户。我需要能够确保具有该用户名的用户存在。我使用的是以下代码,但是虽然if被调用,else在调用时不会被调用。

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" : "test1@tes1.com",
        "uid" : "097ca4a4-563f-4867ghj0-6209288bd7f02",
        "username" : "test1",
        "waiting" : "0"
    },
    "55a8f979-ad0d-438u989u69-aa4a-45adb16175e7" : {
        "email" : "test2@test2.com",
        "uid" : "55a8f979-ad0d-438u989u69-aa4a-45adb16175e7",
        "username" : "test2",
        "waiting" : "0"
    }
}

1 个答案:

答案 0 :(得分:8)

轻松修复:

不要使用.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)
            }
     }