如何在firebase中获取密钥的值 - iOS

时间:2018-05-22 05:07:52

标签: ios swift firebase firebase-realtime-database

所以这是我的JSON树的图像: my JSON TREE

问题: 我想知道如何检查usernames中是否存在用户名,例如 sean 。我目前不知道如何实现这一点。

我尝试过的: usernames孩子的关键是“theUsernameOf - userUID”,这会导致问题userUID是动态的,并且与每个用户(来自firebase auth)不同,因此我无法使用:

.queryOrderedByChild("theUsernameOf-userUID").queryEqual(toValue: self.usernameTextBox.text!)

usernames子项的键不能像theUsername那样是静态的,因为它只能有1个值/无法生成更多节点。

非常感谢,如果我没有足够清楚解释,请对不起。

4 个答案:

答案 0 :(得分:2)

我想修改您的数据库结构,因为当前执行此查询不正确。

应该如下所示:

enter image description here

始终使用自动递增的键进行查询。这里usernames -> autoGeneratedKey -> yourData (Dictionary - Key-Value pair)现在您可以轻松检查是否存在任何密钥。

let ref = defaultDB.reference.child("usernames")
ref.queryOrdered(byChild: "username").queryEqual(toValue: "sean").observeSingleEvent(of: DataEventType.value) { (snapshot) in
    if snapshot.exists() {
        print("exists")
    }
    else {
        print("doesn't exist")
    }
}
  

输出存在

这是正确的方法。只需检查snapshot.exists()即可为您完成工作。

答案 1 :(得分:0)

以下是如何做到这一点

  1. 将数据库引用设置为用户名节点。例如class alexicon(object): def __init__(self): self.directions = ['north', 'south', 'west', 'east', 'up', 'down'] self.items = [] def scan(self, words): self.word = words.split() # direction self.direction_word = [i for i in self.word if i in self.directions] self.direction_list = [] for x in self.direction_word: self.direction_list.append(('direction', '%s' %(x)) ) if self.direction_list != []: self.items.extend(self.direction_list) else: pass return self.items lexicon = alexicon() result = lexicon.scan('north') print result

  2. 现在使用for循环解析快照 让usernames = snapshot.value为!的NSDictionary

  3. 现在是for循环

    db.ref.child("usernames")

答案 2 :(得分:0)

你也可以:

usernames进行firebase调用并进行以下操作:

let usernames = snapshot.value as? [String: AnyObject], 那么你所要做的就是

if let keyExists = usernames[YOURUSERNAMECHECKSTRING] { //It's true }

另一种看待它的方式。

答案 3 :(得分:0)

尝试此代码将帮助您不需要更改您的firebase结构

  1. 在Swift中

    function addToCart() { // onclick Event to add and show the price
      arr.push(Number(productPrice.innerHTML));
      function getSum(total, num) {
        return total + num;
      }
      var tempTotal = arr.reduce(getSum);
      totalPrice.innerHTML = tempTotal;
    }
    
  2. 目标c

    Database.database().reference(withPath: "users").queryOrdered(byChild: "usernames").queryEqual(toValue: "yourUserName").observe(.value)
       { (snapshot:DataSnapshot) in
    
          if snapshot.valueInExportFormat() is NSDictionary
          {
                    // User is exits
          }
          else
          {
    
          }
       }