获得同名儿童的价值 - Firebase Swift3

时间:2017-03-10 04:38:34

标签: swift loops firebase swift3 firebase-realtime-database

我使用以下查询来获取下面的快照。

dbRef.child("users").queryOrdered(byChild: "username").queryStarting(atValue: text).queryEnding(atValue: text+"\u{f8ff}").observe(.value, with: { snapshot in })

但我无法弄清楚如何迭代孩子们的价值观"用户名" (即比尔,比利,比利金斯),因为他们都有相同的密钥("用户名")。我试图提取所有名称并将它们放在一个名字数组中。

Snap (users) {
   fDrzmwRUt2guh3O8pc792ipyEqA3 =     {
       username = bill;
   };
   qyQkIOxSpXgQoUoh0QNvPlkQ1Mp1 =     {
       username = billy;
   };
   edSk54xSpXgQoYoh0QNvOlkQ1Mp3 =     {
       username = billykins;
   };
}

这是我的函数,它获取快照并尝试迭代它。但是,循环崩溃了:

func findUsers(text: String) {
        print("search triggered")
        dbRef.child("users").queryOrdered(byChild: "username").queryStarting(atValue: text).queryEnding(atValue: text+"\u{f8ff}").observe(.value, with: { snapshot in

        print(snapshot)

        for i in snapshot.children{
            let value = snapshot.value as! Dictionary<String,String>
            let username = value["username"]
            print(username)
            self.userList.append(username!)
            print(self.userList)
        }
    }) { (error) in
        print("searchUsers \(error.localizedDescription)")
    }
}

这是日志的一小部分。发帖太久了:

0x1002cg360 <+272>: adr    x9, #268929               ; "value type is not bridged to Objective-C"
0x1002cg364 <+276>: nop    
0x1002cg368 <+280>: str    x9, [x8, #8]
->  0x1002cg36c <+284>: brk    #0x1
0x1002cg370 <+288>: .long  0xffffffe8                ; unknown opcode

1 个答案:

答案 0 :(得分:0)

这是我正在寻找的解决方案。我需要遍历大快照以将子快照提取到数组中,然后按值循环子快照以获取用户名:

func findUsers(text: String) {
    print("search triggered")
    dbRef.child("users").queryOrdered(byChild: "username").queryStarting(atValue: text).queryEnding(atValue: text+"\u{f8ff}").observe(.value, with: { snapshot in

        print(snapshot)

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

            var blaArray = [FIRDataSnapshot]()

            for child in snapshot.children {
                let snap = child as! FIRDataSnapshot //downcast
                blaArray.append(snap)
            }

            for child in blaArray {
                let dict = child.value as! NSDictionary
                let username = dict["username"]!
                print(username)

            }
    }) { (error) in
        print("searchUsers \(error.localizedDescription)")
    }
}

改编自这篇文章:Get data out of array of Firebase snapshots