J'essaie de charger l'image de l'URL dans mon application iOS Swift. J'ai écrit le code suivant.
let imageURL = minHost + "\(userData["profileImage"])" let url = URL(string: imageURL)! let imageData = try? Data(contentsOf: url) profileImage.image = UIImage(data: imageData!)
5 Réponses :
Vous pouvez essayer comme ceci:
let url = URL(string: "image url here") if url != nil { DispatchQueue.global().async { [weak self] in if let data = try? Data(contentsOf: url!) { if let image = UIImage(data: data) { DispatchQueue.main.async { self.profileImage.image = image } } } } }
Essayez ceci
Ne faites jamais la tâche de téléchargement sur le fil principal. Si vous le faites, vous ne pouvez pas accéder correctement aux composants des écrans visibles actuels. Il devrait être toujours sur le fil d'arrière-plan.
ne faites jamais le téléchargement i> avec (contenu de :) code> pas même sur un fil d'arrière-plan
Essayez ceci sur le terrain de jeu. Le chargement de l'image de l'URL prend un certain temps et doit être exécuté sur un autre fil différent du fil principal.
import UIKit let url = URL(string: "https://cdn.arstechnica.net/wp-content/uploads/2018/06/macOS-Mojave-Dynamic-Wallpaper-transition.jpg")! var image = UIImage() DispatchQueue.global().async { if let data = try? Data(contentsOf: url) { DispatchQueue.main.async { image = UIImage(data: data)! } } } image
yo-yo. Ça marche! J'ai testé :))
S'il vous plaît, marquez la réponse comme répondu si elle a aidé!)
Vous êtes fortement découragé de charger des données à partir d'une URL distante avec des données synchrones (contenu de code> API, même sur un fil d'arrière-plan.
au lieu d'aller chercher une image à l'aide de données (contenu de :) code> méthode, utilisez
urlsession code> pour effectuer des appels réseau.
let imageURL = minHost + "\(userData["profileImage"])"
if let url = URL(string: imageURL) {
URLSession.shared.dataTask(with: url) {[weak self] (data, urlResponse, error) in
if let data = data {
DispatchQueue.main.async {
self?.profileImage.image = UIImage(data: imageData)
}
}
}.resume()
}