web-dev-qa-db-fra.com

Comment intégrer la dernière API SDWebImage dans mon projet basé sur Swift?

J’ai utilisé SDWebImage avec Objective C et cela a très bien fonctionné pour moi, mais j’apprends maintenant Swift et tente d’intégrer la dernière version de l’API, mais je suis bloqué à chaque étape, car l’API est dans Objective C et aucune étape n’est indiquée l'API avec Swift. J'ai lu les documents et créé le fichier d'en-tête de pont et inclus le fichier requis comme ci-dessous:

#ifndef MyProject_Bridging_Header_h
#define MyProject_Bridging_Header_h

#import <SDWebImage/UIImageView+WebCache.h>
#import "UIImageView+WebCache.h"

#endif

J'ai également ajouté les frameworks et déplacé le projet SDWebImage dans mon application comme expliqué ici

Je me bats vraiment dans cela. S'il vous plaît aider! Pour référence, j'ai ajouté une image montrant l'erreur!enter image description here

11
Developer

Voici un exemple de code qui devrait fonctionner:

let block: SDWebImageCompletionBlock! = {(image: UIImage!, error: NSError!, cacheType: SDImageCacheType!, imageURL: NSURL!) -> Void in
    println(self)
}

let url = NSURL(string: "http://placehold.it/350x150")

self.imageView.sd_setImageWithURL(url, completed: block)

et dans votre fichier d'en-tête de pontage:

#import "UIImageView+WebCache.h"

Votre fichier d'en-tête de pontage devrait donc fonctionner, mais j'ai parfois des problèmes avec l'en-tête de pontage et, dans ces cas, je le supprime simplement, je l'ajoute à nouveau et tout fonctionne correctement après.

23
Ghislaindj

La meilleure option consiste à faire glisser le dossier SDWebImage dans le projet. Assurez-vous que l'option "Copier les éléments si nécessaire" est cochée.

Créer un pontage C Obj C: Fichier -> Nouveau -> Source -> Fichier d’en-tête -> Nom comme nom-app-pontage-en-tête.

Ajouter ce qui suit:

        #ifndef AppName_AppName_Bridging_Header_h
        #define AppName_AppName_Bridging_Header_h

        #import <SDWebImage/UIImageView+WebCache.h>
        #import "UIImageView+WebCache.h"
        #endif

    or

 #import "UIImageView+WebCache.h"   

Référence: https://developer.Apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

Remarque: Les paramètres de construction, dans Swift Compiler - Génération de code, assurez-vous que le paramètre de construction En-tête de pontage Objective-C sous un chemin d'accès au fichier d'en-tête de pontage. - c'est comme testSD/testSD-Bridging-Header.h ou testSD-Bridging-Header.h (ouvrez le dossier Projet et recherchez le chemin du fichier d'en-tête)

Maintenant, essayez avec ce code:

let block: SDWebImageCompletionBlock! = {(image: UIImage!, error: NSError!, cacheType: SDImageCacheType!, imageURL: NSURL!) -> Void in
    println(self)
}

let url = NSURL(string: "http://arrow_upward.com/350x150")
self.imageView.sd_setImageWithURL(url, completed: block)

Supposons que si vous utilisez UICollectionView pour renseigner la création d'image en cache, essayez avec ce code.

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = photoListCollectionView.dequeueReusableCellWithReuseIdentifier("scoutimagecellidentifier", forIndexPath: indexPath) as! ScoutImageCell

        //Loading image from server using SDWebImage library
        let thumbImageUrl  =   NSURL(string: self.photoPropertyArray[indexPath.row] as String)

        //Image Fetching is done in background GCD thread        

SDWebImageManager.sharedManager().downloadImageWithURL(thumbImageUrl, options: [],progress: nil, completed: {[weak self] (image, error, cached, finished, url) in

if let wSelf = self {

                //On Main Thread
                dispatch_async(dispatch_get_main_queue()){
                    cell.scoutimage.image = image
                    cell.photoloader.stopAnimating()
                }
            }
            })
        return cell
    }
3
A.G

Code Swift 3.0  

importer SDWebImage

let url = URL.init(string:"https://vignette3.wikia.nocookie.net/zelda/images/b/b1/Link_%28SSB_3DS_%26_Wii_U%29.png")
imagelogo.sd_setImage(with: url , placeholderImage: nil)
0
Arjun Yadav