这是我用来从存储中获取图像的代码。它像魅力一样工作,但我不想再次在不同的视图上重新下载它。
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)
}
}
}
}
我应该如何处理?
答案 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不同,这令人困惑