SwiftUI:将多个图像上载到Firebase

SwiftUI:将多个图像上载到Firebase,firebase,swiftui,firebase-storage,Firebase,Swiftui,Firebase Storage,目标:从SwiftUI应用程序上传3张图片到Firebase,每个图片都有不同的URL 问题:我只上传了1个 我尝试过的(但没有成功)。。。。 : 全功能波纹管: static func savePostPhoto( //id userId: String, image1: Data, image2: Data, image3: Data, // imagesArray : [Data], met

目标:从SwiftUI应用程序上传3张图片到Firebase,每个图片都有不同的URL

问题:我只上传了1个

我尝试过的(但没有成功)。。。。 :

全功能波纹管:


static func savePostPhoto(
    
    
    //id
    userId: String,
    
    image1: Data,
    image2: Data,
    image3: Data,
    
   // imagesArray : [Data],


    metadata: StorageMetadata,
    storagePostRef: StorageReference,
    onSuccess: @escaping() -> Void,
    onError: @escaping(_ errorMessage: String) -> Void)

  {
    
    let arrayOfImages : [Data] = [image1, image2, image3]

        
    //image storage
    storagePostRef.putData(image1, metadata: metadata) { (storageMetadata, error) in
        
          if error != nil {
              onError(error!.localizedDescription)
              return
          }
        
        //image URL

        storagePostRef.downloadURL { (url, error) in
            
            let image1 = url?.absoluteString
            let image2 = url?.absoluteString
            let image3 = url?.absoluteString

   
        }
    }
    


}



每次调用
putData
都会在调用
putData
的位置存储一个图像

因此,如果要存储三个单独的图像,必须对三个不同的
StorageReference
对象调用
putData
。然后,要获取三个下载URL,还需要对三个
StorageReference
对象中的每一个调用
downloadURL

storagePostRef1.putData(image1, metadata: metadata) { (storageMetadata, error) in
  storagePostRef1.downloadURL { (url1, error) in
    let image1 = url?.absoluteString  storagePostRef2.putData(image2, metadata: metadata) { (storageMetadata, error) in
      storagePostRef2.downloadURL { (url2, error) in
        storagePostRef3.putData(image3, metadata: metadata) { (storageMetadata, error) in
          storagePostRef3.downloadURL { (url3, error) in
您可以创建自己的helper函数来处理对
putData
downloadUrl
的调用,只需一个闭包/回调,就可以稍微清理一下

storagePostRef1.putData(image1, metadata: metadata) { (storageMetadata, error) in
  storagePostRef1.downloadURL { (url1, error) in
    let image1 = url?.absoluteString  storagePostRef2.putData(image2, metadata: metadata) { (storageMetadata, error) in
      storagePostRef2.downloadURL { (url2, error) in
        storagePostRef3.putData(image3, metadata: metadata) { (storageMetadata, error) in
          storagePostRef3.downloadURL { (url3, error) in