gpt4 book ai didi

swift - 如何等待异步任务结束 - Swift 4

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

我需要从 Firebase 数据库读取数据并将数据插入到结构中,稍后我将在该结构上执行一些操作。我现在面临的问题是,由于 Firebase 以异步方式管理这些事情,当我检查结构内部时,它通常是 nil 并且尚未填充数据。

我知道像我实际上所做的那样使用异步 block 之外的值是错误的,并且可以使用回调来解决我的问题。我在网上阅读了很多示例,但我不知道如何在我的代码中实现它们。

为了简单起见,在下面的示例中,我只从数据库下载一个对象。

func fetchJSON(key: String) -> Void {
var meal = Meal()
let ref = rootRef.child(key)

ref.observe(.value) { (snap: DataSnapshot) in
meal.firstMeal = snap.childSnapshot(forPath: "first").value as! String
meal.secondMeal = snap.childSnapshot(forPath: "second").value as! String
meal.thirdMeal = snap.childSnapshot(forPath: "third").value as! String
}

self.meals.append(meal)
}

函数调用如下所示:

fetchJSON(key: currentDate)

有人可以帮我吗?

最佳答案

对于 Firebase,您还可以找到方便的 Promise。我用PromiseKit图书馆,它工作得很好。

你可以这样做:

fetchJSON(key: currentDate).done { meal in
print(meal)
}

func fetchJSON(key: String) -> Promise<Meal> {
let ref = rootRef.child(key)
return Promise { seal in
ref.observe(.value) { (snap: DataSnapshot) in
guard let firstMeal = snap.childSnapshot(forPath: "first").value as! String,
let secondMeal = snap.childSnapshot(forPath: "second").value as! String,
let thirdMeal = snap.childSnapshot(forPath: "third").value as! String {
let meal = Meal(firstMeal: firstMeal,
secondMeal: secondMeal,
thirdMeal: thirdMeal)
seal.fulfill(meal)
}
}
}
}

关于swift - 如何等待异步任务结束 - Swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50264169/

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