Как интегрировать новейший API SDWebImage в мой проект на основе Swift?

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

#ifndef MyProject_Bridging_Header_h
#define MyProject_Bridging_Header_h

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

#endif

Я добавил фреймворки и перетащил проект SDWebImage в свое приложение, как описано здесь

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

Ответ 1

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

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"

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

Ответ 2

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

Сделать Obj C Bridging: File → New → Source → Header File → 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 - Generator Code, убедитесь, что в настройке сборки Objective-C Bridging Header внизу есть путь к файлу заголовка моста. - это похоже на 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
    }

Ответ 3

код быстрого 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)