Swift 3 和 Firebase:从快照中检索自动 ID 值

Swift 3 and Firebase: Retrieve auto id value from snapshot

我在 firebase 上创建了下面的结构,我需要获取带有红色下划线的自动 ID:

我创建的用于查询值的代码:

let query = reference.queryOrdered(byChild: "receiverId").queryEqual(toValue: "LKupL7KYiedpr6uEizdCapezJ6i2")
        //Start process
        query.observe(.value, with: { (snapshot) in
            guard snapshot.exists() else{
                print("Data doesn't exists")
                return
            }
            print(snapshot.key)
}

我的“snapshot.value”的结果是:

Optional({
    "-KaRVjQgfFD00GXurK9m" =     {
        receiverId = LKupL7KYiedpr6uEizdCapezJ6i2;
        senderId = bS6JPkEDXIVrlYtSeQQgOjCNTii1;
        timestamp = 1484389589738;
    };
})

如何从上面的节点中只获取字符串 -KaRVjQgfFD00GXurK9m

我曾尝试使用“print(snapshot.key)”,但它会导致用户 ID: bS6JPkEDXIVrlYtSeQQgOjCNTii1

一些想法?非常感谢。

.value returns 父节点和所有满足查询结果的子节点。在这种情况下,需要迭代子项(可能有超过 1 个子项匹配查询)。

snapshot.key 是父节点键 (bS6JPkEDXIVrlYtSeQQgOjCNTii1),值是所有子节点的快照(字典)。这些子节点中的每一个都是 key:value 对 uid:value 并且值是子节点的字典、receiverId、senderId 等

此代码将为匹配查询的每个用户节点打印每个子节点的 uid 和值之一,时间戳。

    let usersRef = ref.child("users")
    let queryRef = usersRef.queryOrdered(byChild: "receiverId")
                           .queryEqual(toValue: "LKupL7KYiedpr6uEizdCapezJ6i2")

    queryRef.observeSingleEvent(of: .value, with: { (snapshot) in

        for snap in snapshot.children {
            let userSnap = snap as! FIRDataSnapshot
            let uid = userSnap.key //the uid of each user
            let userDict = userSnap.value as! [String:AnyObject]
            let timestamp = userDict["timestamp"] as! String
            print("key = \(uid) and timestamp = \(timestamp)")
        } 
    })