gpt4 book ai didi

swift - 将函数与完成处理程序结合使用 firebase

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

我正在尝试从我的 firebase 存储中获取一些图像,并将其附加到空的 FBPicArray 变量中。

let storage = Storage.storage()
let imageNames = ["firstImage.jpg", "seccondImage.jpg", "thirdImage.jpg"]
var FBPicArray = [UIImage]()


func loadFirebaseIMG(resultPicArray: @escaping([UIImage]) -> ()) {

for item in imageNames {
let storageref = storage.reference(withPath: "Images/\(item)")
storageref.getData(maxSize: 1 * 1024 * 1024) { (data, error) in
if let error = error {
print("FB storage error:", error)
} else {
let image = UIImage(data: data!)
self.FBPicArray.append(image!)
resultPicArray(self.FBPicArray)
}
}
}
}

太好了。我可以在调用函数时访问 FBPicArray,但是当我想要执行诸如显示数组中存在图像的单元格数量之类的操作时,我会遇到问题:

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

loadFirebaseIMG { (img) in

}

return FBPicArray.count
}

当我喜欢上面的示例时,运行这里的函数不会显示任何单元格,但是当我尝试将 return 语句放入 loadFirebaseIMG 函数中时,这也不起作用。如何在函数之外访问这些数据以在代码的其他地方使用?

最佳答案

您不需要任何补全,而是更改为

func loadFirebaseIMG() {

for item in imageNames {
let storageref = storage.reference(withPath: "Images/\(item)")
storageref.getData(maxSize: 1 * 1024 * 1024) { (data, error) in
if let error = error {
print("FB storage error:", error)
} else {
let image = UIImage(data: data!)
self.fBPicArray.append(image!)
self.collectionView.reloadData() // reload the collection when you receive an image , performance tip is to use insertItems
}
}
}
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return fBPicArray.count
}

并在 viewDidLoad 内调用 loadFirebaseIMG ,如果您需要加载所有内容,那么最后刷新集合,我不建议这样做,然后使用 DispatchGroup

关于swift - 将函数与完成处理程序结合使用 firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515801/

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