2014-11-10 1 views
11

Я использовал SDWebImage с Objective C, и он отлично поработал для меня, но теперь я изучаю Swift и пытаюсь интегрировать последнюю версию API, но я застрял на каждом шагу, поскольку API находится в Objective C, и нет никаких шагов, упомянутых для использования API с Swift. Я читал документы и создал файл заголовок моста и включил нужный файл, как показано ниже:Как интегрировать новейший API SDWebImage в мой проект на основе Swift?

#ifndef MyProject_Bridging_Header_h 
#define MyProject_Bridging_Header_h 

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

#endif 

я добавил рамок, а также и перетащил проект SDWebImage в моем приложении, как описан here

Я нахожусь действительно борется с этим. Пожалуйста помоги! Для справки я добавил изображение, показывающее ошибку! enter image description here

+0

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

+0

лучше вас используйте Haneke для кэширования изображений в быстрых https://github.com/Haneke/HanekeSwift –

+0

@Saurabh Prajapati: Вы использовали это? Как оно? – Developer

ответ

23

Вот пример кода, который должен работать:

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) 

и в вашем мостиковых заголовочном файле:

#import "UIImageView+WebCache.h" 

Таким образом, ваш моста заголовочный файл должен работать, но иногда у меня были проблемы с мостовой заголовок, и в этих случаях я просто удаляю его и добавляю его снова, и после этого все отлично работает.

+0

Я могу использовать ваше решение, но без заголовка, и он все еще работает хорошо. Спасибо. – yogipriyo

+0

не лучший ответ лучше всего работает! – khunshan

3

Лучшим вариантом будет перетаскивание папки SDWebImage для проекта. Удостоверьтесь, что «копировать элементы при необходимости» отмечен галочкой.

Создать Obj C Мосты: Файл -> Создать -> Источник -> Файл заголовка -> Name as AppName-Bridging-Header.

Добавьте следующее:

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

Ссылка: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html

Примечание: Создание настроек, в Swift Compiler - генерации кода, убедитесь, что Objective-C Bridging заголовка построить установки под есть путь к мостовой файл заголовка. - его, как testSD/testSD-Bridging-header.h или testSD-Bridging-header.h (Открыть папку проекта и найти путь к файлу заголовка)

Теперь попробуйте с этим кодом:

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) 

Пусть если вы используете UICollectionView для заполнения изображений в кэше, попробуйте с этим кодом.

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

быстры 3,0 код

импорт 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)