gpt4 book ai didi

Swift 5,如何在从 Firebase 获取所有添加的子项后执行代码

转载 作者:行者123 更新时间:2023-11-28 13:30:26 26 4
gpt4 key购买 nike

在 Swift 5 中从 Firebase 获取所有 childadded 后如何执行一些代码?

我试过使用 DispatchGroup 并观察 .value,但它们都没有有效地工作。

let dispatchGroup = DispachGroup()

ref.child("path").observe(.childAdded, with: { (snapshot) in
self.dispatchGroup.enter()
//store snapshot data into an object
self.dispatchGroup.leave()
})

dispatchGroup.notify(queue: .main) {
//code to execute after all children are fetched
}

在这种情况下,代码将在获取数据之前执行。

只有回调 block 到达最后一个 child 时,如何执行代码?

最佳答案

一种选择是利用在 .childAdded 函数之后调用 Firebase .value 函数。

这意味着 .childAdded 将遍历所有 childNode,然后在读取最后一个 childNode 后,将调用任何 .value 函数。

假设我们要遍历用户节点中的所有用户,打印他们的名字,并在打印最后一个用户名后,输出一条消息,表明所有用户都已读入。

从一个简单的结构开始

users
uid_0
name: "Jim"
uid_1
name: "Spock"
uid_2
name: "Bones"

然后是读取用户的代码,一次一个,打印他们的名字,然后在读取所有名字后输出到控制台

var initialRead = true

func readTheUsers() {
let usersRef = self.ref.child("users")

usersRef.observe(.childAdded, with: { snapshot in
let userName = snapshot.childSnapshot(forPath: "name").value as? String ?? "no name"
print(userName)

if self.initialRead == false {
print("a new user was added")
}
})

usersRef.observeSingleEvent(of: .value, with: { snapshot in
print("--inital load has completed and the last user was read--")
self.initialRead = false
})
}

和输出

Jim
Spock
Bones
--inital load has completed and the last user was read--

请注意,这将在用户节点上留下一个观察者,因此如果添加了一个新用户,它也会打印他们的名字。

注意 注意:self.ref 指向我的根 firebase 引用。

关于Swift 5,如何在从 Firebase 获取所有添加的子项后执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57450794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com