2014-11-10 4 views
11

Ich habe SDWebImage mit Objective C verwendet und es funktionierte gut für mich, aber jetzt lerne ich Swift und versuche die neueste Version der API zu integrieren, aber ich stecke bei jedem Schritt fest, da API in Objective C ist und keine Schritte erwähnt werden Verwenden der API mit Swift. las ich die Dokumente und erstellt die Brücke Header-Datei und enthalten die gewünschte Datei wie unten:Wie kann ich die neueste SDWebImage API in mein Swift-basiertes Projekt integrieren?

#ifndef MyProject_Bridging_Header_h 
#define MyProject_Bridging_Header_h 

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

#endif 

I als auch die Rahmenbedingungen hinzugefügt haben, und zog das SDWebImage Projekt innerhalb meiner app als here

erklärte ich bin wirklich kämpfen in diesem. Bitte helfen Sie! Als Referenz habe ich ein Bild hinzugefügt, das den Fehler zeigt! Hier enter image description here

+0

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

+0

besser Sie Verwenden Sie Haneke zum Zwischenspeichern von Bildern in swift https://github.com/Haneke/HanekeSwift –

+0

@Saurabh Prajapati: Haben Sie das verwendet? Wie ist das? – Developer

Antwort

23

ist ein Codebeispiel, das funktionieren soll:

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) 

und in der Überbrückung Header-Datei:

#import "UIImageView+WebCache.h" 

So Ihre Überbrückung Header-Datei funktionieren soll, aber manchmal hatte ich Probleme mit der Bridging Header und in diesen Fällen, ich lösche es einfach, und fügen Sie es erneut und alles funktioniert gut nach.

+0

Ich kann Ihre Lösung aber ohne den Header verwenden und es funktioniert immer noch gut. Danke. – yogipriyo

+0

nicht die beste Antwort am besten funktioniert es! – khunshan

3

Die beste Option ist das Ziehen und Ablegen des SDWebImage-Ordners in das Projekt. Stellen Sie sicher, dass "Artikel bei Bedarf kopieren" angekreuzt ist.

Machen Sie eine Obj C Bridging: Datei -> Neu -> Quelle -> Header-Datei -> Name als AppName-Bridging-Header.

Fügen Sie die folgenden:

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

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

Hinweis: Einstellungen beim Aufbau, in Swift Compiler - Code-Generierung, stellen Sie sicher, dass die Objective-C-Bridging-Header bauen unter einen Pfad zu der hat Einstellung Bridging-Header-Datei. - es ist wie testSD/testSD-Bridging-header.h oder testSD-Bridging-header.h (Projektordner öffnen und die Header-Datei Pfad finden)

Jetzt mit diesem Code versuchen:

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) 

Angenommen Wenn Sie eine UICollectionView verwenden, um Cache Imaging zu füllen, versuchen Sie es mit diesem 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 
    } 
0

swift 3.0-Code

Import 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) 
Verwandte Themen