Este es el código que uso para obtener la imagen del almacenamiento. Funciona a las mil maravillas, pero no quiero volver a descargarlo en diferentes vistas de nuevo.
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) } } } }¿Cómo debería manejar esto?
Simplemente declare UIImage globalmente en su clase, y dentro de su función, donde está configurando imageHolder, asigne esa imagen descargada a la imagen global y utilícela donde quiera.
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) } } } }Si solo tiene una o dos image , userdefault almacene en userdefault del usuario y luego puede acceder a cualquier controlador data vista. imagen
let image = UIImage(data: imageData)Tu puedes hacer
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 }O use SDWebImage y comparta el enlace, también puede hacer una var global como
var image:UIImage?pero no se recomienda ya que no tiene agrupación para que el desarrollador sepa que es fuente local/instancia/global, por lo que es confuso a diferencia de singleton