如何在不同视图之间共享从Firebase存储下载的图像?

时间:2019-02-28 10:39:18

标签: ios swift firebase-realtime-database firebase-storage

这是我用来从存储中获取图像的代码。它像魅力一样工作,但我不想再次在不同的视图上重新下载它。

func retreiveImagesFromFireBase(downloadUrl:String,imageHolder:UIImageView){
    if downloadUrl != "" {
        let storageRef = Storage.storage().reference(forURL: downloadUrl)
        // Download the data, assuming a max size of 1MB (you can change this as necessary)
        storageRef.getData(maxSize: 5*1024*1024) { (data, error) in
            if error == nil {
                if let pic = UIImage(data: data!) {
                    imageHolder.image = pic
                }
            } else {
                print(error)
            }
        }
    }
}

我应该如何处理?

3 个答案:

答案 0 :(得分:2)

只需在您的类中以及在函数内部(在其中设置imageHolder的位置)全局声明UIImage,然后将下载的图像分配给全局图像,然后在任何需要的地方使用它即可。

UIImage image;

func retreiveImagesFromFireBase(downloadUrl:String,imageHolder:UIImageView){
            if downloadUrl != ""{
                let storageRef = Storage.storage().reference(forURL: downloadUrl)
                // Download the data, assuming a max size of 1MB (you can change this as necessary)
                storageRef.getData(maxSize: 5*1024*1024) { (data, error) in
                    if error == nil{
                        if let pic = UIImage(data: data!){
                            imageHolder.image = pic
                            image = pic // use it on other views 
                        }
                    }else{
                        print(error)
                    }
                }
            }
        }

答案 1 :(得分:2)

如果只有一两个图像,则只需将其存储在userdefault中,然后就可以在任何viewController中进行访问,将image作为data存储在userdefault中 每当您要使用时,只需将数据转换为图像并使用它,请参见以下代码将数据转换为图像

let image = UIImage(data: imageData)

答案 2 :(得分:1)

你可以

class Service { 
   static let shared = Service()  
   var image1:UIImage?
   var image2:UIImage?
   let imageLink = "//////" // or with SDWebImage
}

if let pic = UIImage(data: data!){
    Service.shared.image = pic
}

或者使用SDWebImage并共享链接,也可以像创建全局变量一样

var image:UIImage? 

但不建议这样做,因为它没有分组以让开发人员知道其来源local / instance / global,因此与singleton不同,这令人困惑