C'est le code que j'utilise pour récupérer l'image du stockage. Cela fonctionne comme du charme mais je ne veux pas le télécharger à nouveau sur différentes vues.
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) } } } }
Comment dois-je gérer cela?
3 Réponses :
Vous pouvez faire
var image:UIImage?
Ou utiliser SDWebImage et partager le lien, vous pouvez également créer une variable globale comme
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 }
mais ce n'est pas recommandé car il n'a pas de regroupement pour informer le développeur que sa source est locale / instance / globale, donc c'est déroutant contrairement au singleton
Je ne peux pas utiliser de bibliothèques tierces car mes règles de stockage ne leur permettent pas de récupérer les fichiers et je veux des titres, donc je ne peux pas changer les règles.
devrais-je ajouter deux variables UIImage dans cette classe.
Déclarez simplement UIImage globalement dans votre classe, et dans votre fonction, où vous définissez imageHolder, attribuez cette image téléchargée à l'image globale et utilisez-la où vous le souhaitez.
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 vous n'avez qu'une ou deux images, stockez simplement dans userdefault
et vous pouvez accéder dans n'importe quel viewController, stocker image
en tant que données
dans userdefault
chaque fois que vous souhaitez utiliser, il suffit de convertir les données en image et de les utiliser, voir le code suivant pour convertir les données en image
let image = UIImage(data: imageData)
Mettez l'image en cache. Signifie: vous pouvez conserver l'image en mémoire ou / et enregistrer l'image dans le répertoire cache
Avez-vous plusieurs images utilisées avec une vue différente ou une seule image?
Le mode hors ligne de Firebase fait-il cela pour nous?
J'ai deux images en fait et les deux sont utilisées sur plus de trois vues.
salut @CaptainNewt si vous n'avez que deux images, stockez-les dans userdefault et vous pouvez les utiliser n'importe où, voir ma réponse