Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用ChildAdded从firebase数据库中使用swift 4获取第一个密钥_Ios_Swift_Firebase_Firebase Realtime Database_Swift4 - Fatal编程技术网

Ios 使用ChildAdded从firebase数据库中使用swift 4获取第一个密钥

Ios 使用ChildAdded从firebase数据库中使用swift 4获取第一个密钥,ios,swift,firebase,firebase-realtime-database,swift4,Ios,Swift,Firebase,Firebase Realtime Database,Swift4,我正在尝试从firebase数据库中获取第一个密钥,但由于某些原因,没有打印任何内容。如何使用.childAdded从firebase数据库获取第一个密钥 通常在从数据库检索项目列表时使用添加的子事件。与返回位置的全部内容的值不同,添加的child_为每个现有子级触发一次,然后在每次将新子级添加到指定路径时再次触发。事件回调传递一个包含新子级数据的快照。出于排序的目的,还向它传递了第二个参数,该参数包含前一个子级的键 发件人: 根据您的要求,这是可能的。增值和增值 然后: if let firs

我正在尝试从firebase数据库中获取第一个密钥,但由于某些原因,没有打印任何内容。如何使用.childAdded从firebase数据库获取第一个密钥

通常在从数据库检索项目列表时使用添加的子事件。与返回位置的全部内容的值不同,添加的child_为每个现有子级触发一次,然后在每次将新子级添加到指定路径时再次触发。事件回调传递一个包含新子级数据的快照。出于排序的目的,还向它传递了第二个参数,该参数包含前一个子级的键

发件人:

根据您的要求,这是可能的。增值和增值

然后:

if let first = child_array.first?.key {
    print(first)  // First Key
}
重要提示:child_added随机收集这些数据,您不应该使用它对数据进行排序


如果你真的在问如何只得到一个节点的第一个子节点,这是非常容易的。下面介绍如何仅获取/users节点的第一个子节点

func getFirstChild() {
    let usersRef = self.ref.child("users")
    usersRef.observeSingleEvent(of: .childAdded, with: { snapshot in
        print(snapshot)
    })
}

如果你只是想要钥匙

或者,如果要使用查询执行相同的操作

func getFirstChildAgain() {
    let usersRef = self.ref.child("users")
    let query = usersRef.queryOrderedByKey().queryLimited(toFirst: 1)
    query.observeSingleEvent(of: .value, with: { snapshot in
        print(snapshot)
    })
}

在{snapshot in if let snapshot=snapshot{guard let first=snapshot.children.allObjects.first中使用if let条件作为?DataSnapshot else{return}printfirst}尝试类似这样的操作OP询问如何获取父节点下的第一个节点。虽然最终结果可能是该节点,但您必须小心使用。childAdded,因为它会迭代所有节点,一次迭代一个。然后将每个节点加载到未真正使用的数组中。如果有一百万个子节点,它将迭代所有节点在退出之前,这可能需要一段时间,并且可能会使设备过载。它还将观察者留在该节点上,因此如果添加了另一个节点,即1M+1节点,它将再次返回整个节点,并在每次添加另一个子节点时提供相同的结果added@Jay的确如此,但op也没有提到任何拥挤的交通
func getFirstChild() {
    let usersRef = self.ref.child("users")
    usersRef.observeSingleEvent(of: .childAdded, with: { snapshot in
        print(snapshot)
    })
}
print(snapshot.key)
func getFirstChildAgain() {
    let usersRef = self.ref.child("users")
    let query = usersRef.queryOrderedByKey().queryLimited(toFirst: 1)
    query.observeSingleEvent(of: .value, with: { snapshot in
        print(snapshot)
    })
}