swift 无法等待Firebase存储getData

wkyowqbh  于 2022-12-17  发布在  Swift
关注(0)|答案(1)|浏览(147)

我的函数在从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

fcg9iug3

fcg9iug31#

你不能返回用return语句异步加载的数据,因为return在你向数组追加任何元素之前就已经运行了。如果你设置断点并在调试器中运行代码,你可以很容易地验证它。
相反,您可能希望传入闭包/回调,或者使用调度队列将值从函数中取出并放入调用上下文。
有关如何执行此操作的示例,请参见:

相关问题