2016-11-16 5 views
3

Использование SDWebImage для загрузки изображения. Я хочу продолжить операцию, если изображение загружено успешно.Как использовать блок завершения с помощью SDWebImage в Swift 3.0?

cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage.init(named: "App-Default"), completed: {(image: UIImage!, error: NSError!, cacheType: SDImageCacheType, imageURL: URL!) -> Void in 
     // Perform operation. 
}) 

Но я получаю ошибку:

Cannot convert value of type '(UIImage!, NSError!, SDImageCacheType, URL!) -> Void' to expected argument type 'SDExternalCompletionBlock?'

+0

Я получаю эту ошибку ... Не удается преобразовать значение типа - ожидаемого типа аргумента '> Пустота (UIImage !, NSError !, SDImageCacheType, URL!)' 'SDExternalCompletionBlock? – Parvezkhan

+2

Это не должно быть комментарий, который должен быть отправлен с вашим вопросом – Rajat

+0

мой код: cell.appIcon.sd_setImage (с: url, placeholderImage: UIImage.init (named: «App-Default»), завершено: {(изображение : UIImage !, error: NSError !, cacheType: SDImageCacheType, imageURL: URL!) -> Пустота в // Выполнение операции. }) – Parvezkhan

ответ

3

Согласно typedef в рамках вы используете:

typedef void(^SDExternalCompletionBlock)(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL); 

SDExternalCompletionBlock состоит из необязательных параметров, как указано _Nullable. Therefor ваш код должен быть написан так:

cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage.init(named: "App-Default"), completed: {(image: UIImage?, error: NSError?, cacheType: SDImageCacheType, imageURL: URL?) -> Void in 
     // Perform operation. 
}) 

Поскольку компилятор знает типы параметров блока завершающие (из декларации функции), вы можете написать код более сжато и (ИМО) легче читать, как это:

cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage(named: "App-Default"), completed: { (image, error, cacheType, imageURL) in 
     // Perform operation. 
}) 
+0

Я реализовал первый ... Ошибка ввода..Cannot invoke 'sd_setImage' с аргументом list type (с: URL, placeholderImage: UIImage ?, завершено: (UIImage ?, NSError ?, SDImageCacheType, URL?) -> Void) ' – Parvezkhan

+0

Если реализовано второе ... Ошибка ввода. Незначительное использование' sd_setImage ' – Parvezkhan

+0

Autocomplete дает cell.appIcon.sd_setImage (с: URL ?, placeholderImage: UIImage ?, завершен: SDExternalCompletionBlock?) – Parvezkhan

9

Окончательно решена.

cell.appIcon.sd_setImage(with: url!, placeholderImage: UIImage(named: "App-Default"),options: SDWebImageOptions(rawValue: 0), completed: { (image, error, cacheType, imageURL) in 
// Perform operation. 
}) 
1

Это один работает с быстрым 3:

cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage(named: "App-Default"), options: []) { (image, error, imageCacheType, imageUrl) in 
      // Perform your operations here. 
} 
0
cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage(named: "App-Default"),options: SDWebImageOptions(rawValue: 0), completed: { (img, err, cacheType, imgURL) in 
    // code 
}) 

Попробуйте это, надеюсь, что это будет работать нормально

0

СВИФТ 4 версия

cell.appIcon.sd_setImage(with: url, placeholderImage: UIImage(named: "App-Default"),options: SDWebImageOptions(rawValue: 0), completed: { image, error, cacheType, imageURL in 
    // your rest code 
}) 

Важно! Не забудьте отправить себя как слабый или незанятый (например, этот [self weak]/[self unowned]) в блок, когда это необходимо, чтобы избежать сохранения циклов.

Пример:

cell.appIcon.sd_setImage(
    with: url, 
    placeholderImage: UIImage(named: "App-Default"), 
    options: SDWebImageOptions(rawValue: 0), 
    completed: { [self weak] image, error, cacheType, imageURL in 
        guard let selfNotNil = self else { return } 
        // your rest code 
     } 
) 
Смежные вопросы