gpt4 book ai didi

swift - 无法快速访问闭包内的变量

转载 作者:行者123 更新时间:2023-11-30 10:29:20 24 4
gpt4 key购买 nike

我正在尝试将我的 Firebase 数据库数据放入变量中以在我的项目中使用它

var someArray = [Array]()
let dbRef = Database.database().reference().child("SomeDatabase")


func loadSomeDatabaseData {
dbRef.observeSingleEvent(of: .value) { (snapshot) in
let someDict = snapshot.value as! [String:Any]
let keysOfSomeDict = Array(someDict.keys)
self.someArray.append(contentsOf: keysOfSomeDict)
self.collectionView?.reloadData()
}
}

我尝试在 viewDidload 中调用 loadSomeDatabaseData(),然后打印 someArray,这会产生一个空数组。我知道 keysOfSomeDict 数组具有我想要的正确数据,因为我尝试直接在闭包内打印该数组。不过,我还希望能够在我的应用程序的其他地方打印和使用这些数据。

最佳答案

Firebase observeSingleEvent 方法是异步 方法。它在后台执行只是因为从 Firebase 获取数据需要时间。

如果立即打印数组意味着您只能得到空数组。

因此,一旦从 Firebase 获取数据,就打印数组。为此,您可以使用转义闭包

函数声明:

  func loadSomeDatabaseData(resultArray : @escaping([Array])->()) {
dbRef.observeSingleEvent(of: .value) { (snapshot) in
let someDict = snapshot.value as! [String:Any]
let keysOfSomeDict = Array(someDict.keys)
self.someArray.append(contentsOf: keysOfSomeDict)
resultArray(self.someArray)
}
}

函数调用:

self.loadSomeDatabaseData{(firebaseReposne) in
print("FirebaseData" , firebaseReposne) // Hope here you will get your firebase data.
self.collectionView?.reloadData()
}

关于swift - 无法快速访问闭包内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59447083/

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