2017-09-13 2 views
0

J'ai une URL et que vous souhaitez télécharger l'image via une fonction de retour, mais je ne peux pas obtenir à coopérer correctement, voici mon func:Téléchargement de UIImage via AlamofireImage?

func getTabImage(url: URL) -> UIImage { 
    Alamofire.request(url) 
     .responseImage { response in 
      if let image = response.result.value { 
       return image 
      } else { 
       print("Failed to get image") 
      } 
    } 
} 

Je passe dans l'URL, et que vous souhaitez un UIImage retour de la réponse alamofire.

mais je reçois

valeur inattendue de retour non vide dans la fonction vide

pour la déclaration de retour.

Comment puis-je y parvenir correctement?

+0

'return image' Cela ne fonctionnera pas, car l'appel est asynchrone. Utilisez une fermeture à la place. Il y a déjà beaucoup de questions, cherchez "Swift + Closure + Async". Pour le message d'erreur (qui devrait disparaître une fois que vous avez fait la chose de fermeture), c'est parce que vous avez dit "-> UIImage", mais dans le cas de l'autre de 'si let image' vous ne retournez rien. De plus, à la fin de la méthode, vous ne renvoyez rien. – Larme

+0

L'exemple lié est pour URLSession mais c'est exactement la même idée. Ajoutez un rappel à la signature de votre wrapper de méthode, puis utilisez-la avec la valeur à extraire (String dans l'exemple, mais pourrait être n'importe quoi). – Moritz

+0

@Moritz il demande clairement ** Téléchargement UIImage via AlamofireImage ** qui ne sera pas marqué en double avec https://stackoverflow.com/questions/31264172/how-can-i-get-the-data-from-nsurlsession-sharedsession -datataskwithrequest peut-être que c'est une copie mais cette question est différente avec votre question marquée! –

Répondre

5

Vous pouvez utiliser la fonction ci-dessous pour télécharger l'image:

func getImage(_ url:String,handler: @escaping (UIImage?)->Void) { 
     print(url) 
     Alamofire.request(url, method: .get).responseImage { response in 
      if let data = response.result.value { 
       handler(data) 
      } else { 
       handler(nil) 
      } 
     } 
    } 

Utilise

getImage("http://") { (image) in 
    if image != nil { 
     print(image) 
    } 
} 

Ou

Si vous souhaitez définir l'image sur UIImageView extension de son utilisation de AlamofireImage.

if let imageURL = URL(string: "http://"), let placeholder = UIImage(named: "default") { 
    imageView.af_setImage(withURL: imageURL, placeholderImage: placeholder) //set image automatically when download compelete. 
} 
+0

Je veux utiliser l'image sur une icône de la barre d'onglets. aussi je manque argument pour gestionnaire de paramètres trop – jackdm

+0

C'est alternatif parce que je suppose que vous voulez définir l'image sur imageView –

+0

merci alors comment puis-je appeler le premier exemple de getImage? Comme im ayant des problèmes avec l'erreur 'gestionnaire' – jackdm