2014-11-10 15 views
11

Ho usato SDWebImage con Objective C e ha funzionato benissimo per me, ma ora sto imparando Swift e sto provando ad integrare l'ultima versione dell'API ma sto bloccando ogni passaggio dato che l'API è nell'Object C e non ci sono passaggi menzionati utilizzare l'API con Swift. Ho letto i documenti e ha creato il file di intestazione ponte e incluso il file richiesto come di seguito:Come integrare l'ultima API SDWebImage nel mio progetto basato su Swift?

#ifndef MyProject_Bridging_Header_h 
#define MyProject_Bridging_Header_h 

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

#endif 

Ho aggiunto i quadri come bene e trascinare il progetto SDWebImage nel mio app come spiegato here

Sono davvero in difficoltà in questo. Per favore aiuto! Per riferimento ho aggiunto un'immagine che mostra l'errore! enter image description here

+0

http://stackoverflow.com/questions/24948480/sdwebimage-crash-in-swift –

+0

meglio usa Haneke per memorizzare le immagini nella cache in rapida https://github.com/Haneke/HanekeSwift –

+0

@Saurabh Prajapati: Hai usato questo? Com'è? – Developer

risposta

23

Ecco un esempio di codice che dovrebbe funzionare:

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) 

e nel colmare file di intestazione:

#import "UIImageView+WebCache.h" 

Così il vostro file di intestazione colmare dovrebbe funzionare, ma a volte ho avuto problemi con la header di collegamento e in questi casi lo cancello e lo aggiungo di nuovo e tutto funziona bene dopo.

+0

Posso usare la tua soluzione ma senza l'intestazione e funziona ancora bene. Grazie. – yogipriyo

+0

non è la migliore risposta al meglio! – khunshan

3

L'opzione migliore sarà trascinare la cartella SDWebImage sul progetto. Spunta su 'copia elementi se necessario'.

Creare un oggetto C Bridging: File -> Nuovo -> Origine -> File intestazione -> Nome come AppName-Bridging-Header.

Aggiungere il seguente:

 #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" 

Riferimento: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

Nota: le impostazioni di creazione, in Swift compilatore - Generazione di codice, assicurarsi che l'Objective-C Bridging Header configurazione Regolazione sotto ha un percorso per la file di intestazione del bridging. - è come testSD/testSD-Bridging-header.h o testSD-Bridging-header.h (Aprire la cartella di progetto e trovare il percorso del file di intestazione)

Ora provate con questo codice:

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) 

Supponiamo se si utilizza UICollectionView per popolare l'imaging della cache, provare con questo codice.

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 
    } 
0

SWIFT 3.0 codice

importazione 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) 
Problemi correlati