gpt4 book ai didi

ios - 如何等待 Swift 3 中的 Firebase 异步读取调用?

转载 作者:行者123 更新时间:2023-11-28 07:59:35 24 4
gpt4 key购买 nike

<分区>

我有一个函数,我可以在其中对 Firebase 进行异步读取调用以填充数组。该函数在调用未完成的情况下返回。如何等待异步调用完成然后返回数组?我试过使用 dispatchQueue 和信号量,但我不知道如何解决这个问题。

class func generateModelArray() -> [Model]{
var dbref: DatabaseReference?
dbref = Database.database().reference()
var modelAry = [Model]()
let semaphore = DispatchSemaphore(value: 1)
dbref?.child("Parts").observe(.childAdded, with: { (snapshot) in
semaphore.wait()
let partName = snapshot.key
let dict = snapshot.value! as? [String:AnyObject]
let partYear = dict!["year"] as! String
let partPrice = dict!["price"] as! String
//print(partName, partYear, partPrice)
let mod = Model(name: partName, year: partYear, price: partPrice)
modelAry.append(mod)
print(modelAry)
semaphore.signal()
})
semaphore.wait()
return modelAry
}

根据我对 linux 中信号量的理解,当我锁定信号量时,它将阻塞其他线程,而当我发出信号时,它将解锁信号量并允许其他线程继续进行。我怎样才能在 observe() 调用中锁定信号量,因为该函数仍会在调用开始之前返回?

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