我的函数在从fire存储器中检索到所有数据之前结束并返回空。我如何在返回之前获取数据?
代码:
func listItem() -> [imageitem]{
let storage = Storage.storage()
let storageRef = storage.reference().child("images/image")
var array = [imageitem]()
storageRef.listAll { (result, error) in
if let error = error {
print("error")
print(error)
}
print("storagereference")
result?.items.forEach({ StorageReference in
print(StorageReference)
print(StorageReference.name)
StorageReference.getData(maxSize: 5*1024*1024) {data, error in
if error == nil && data != nil{
if let image = UIImage(data: data!){
let element = imageitem(title: StorageReference.name, image: Image(uiImage: image))
array.append(element)
print(array)
}
}
}
})
print("end",array)
}
return array
}
控制台:
storagereference
gs://proj-69776.appspot.com/images/image/gorilla.jpg
gorilla.jpg
gs://proj-69776.appspot.com/images/image/test.jpg
test.jpg
end []
[proj.ListView.imageitem(title: "test.jpg", image: SwiftUI.Image(provider: SwiftUI.ImageProviderBox<__C.UIImage>))]
[proj.ListView.imageitem(title: "test.jpg", image: SwiftUI.Image(provider: SwiftUI.ImageProviderBox<__C.UIImage>)), proj.ListView.imageitem(title: "gorilla.jpg", image: SwiftUI.Image(provider: SwiftUI.ImageProviderBox<__C.UIImage>))]
在addData
之前添加一个await
会产生错误Cannot pass function of type '(StorageReference) async -> Void' to parameter expecting synchronous function type
1条答案
按热度按时间fcg9iug31#
你不能返回用
return
语句异步加载的数据,因为return
在你向数组追加任何元素之前就已经运行了。如果你设置断点并在调试器中运行代码,你可以很容易地验证它。相反,您可能希望传入闭包/回调,或者使用调度队列将值从函数中取出并放入调用上下文。
有关如何执行此操作的示例,请参见: