【问题标题】:Swift & Firebase | Checking if a user exists with a usernameSwift & Firebase |使用用户名检查用户是否存在
【发布时间】:2016-07-26 07:46:29
【问题描述】:

我试图让用户通过搜索用户名来开始游戏并关注其他用户。我需要能够确保存在具有该用户名的用户。我正在使用以下代码,但虽然 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"
    }
}

【问题讨论】:

  • "但是虽然 if 被调用,但 else 不会在我想要的时候被调用" 你是什么意思?
  • @khuong291 我的意思是 if 语句被“激活”:if snapshot.value.valueForKey("username")! as! String == username! { 但即使它应该 else 语句永远不会做任何事情。
  • 它是正确的,因为if语句为真,那么else语句永远不会被执行。
  • @khuong291 否,因为当 if 语句不应该为真时 else 语句不会执行。但我认为问题在于 if 语句由于 firebase 查询的传递方式而不起作用
  • 你能发布更多代码吗,你的用户名是什么?并发布一张图片以查看您的 Firebase 数据库?

标签: swift firebase snapshot firebase-realtime-database


【解决方案1】:

简单修复:

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

【讨论】:

  • 我测试了这种方法,但回调函数被多次调用。所以在输出部分我得到“未找到”,然后是快照值......不知道如何只得到一个结果
  • 您还有其他问题,因为 .value 会读取节点的全部内容,因此不会多次调用它 - 除非您正在修改节点。你也可以做observeSingleEventOfType。
  • 是的,我一定是做错了什么……昨天我整晚都在为此苦苦挣扎,呃,但现在它似乎像你说的那样工作了
  • 不要忘记通过在您的安全规则中添加一个子句来强制服务器上的唯一性:stackoverflow.com/questions/37418518/…
  • 这样的最佳安全规则是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 2018-11-27
  • 1970-01-01
相关资源
最近更新 更多