Неоднозначное использование "SD setImage(with: placeholderImage:completed:)" с Swift 3

Я делаю следующий вызов с помощью SDWebImage на imageView, который отлично работает с Swift 2 но дает ошибку с XCode 8 beta 5 компиляция с Swift 3:

 imageView.sd_setImage(with:url, placeholderImage:placeholder, completed: {
    (image: UIImage?, error: Error?, cacheType: SDImageCacheType, imageURL: URL?) in
            ...
    });

ошибка:

неоднозначное использование ' sd_setImage(with: placeholderImage: completed:)'

Я подозреваю, что у меня что-то не так в подписи для завершенного обработчика, но я не могу понять, каким должен быть синтаксис. Что я упускаю?

2 ответов


компилятор Swift переводит заголовки ObjC в Swift, что приводит к коллизиям имен:

UIImageView + WebCache.h:

o1) - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder completed:(SDWebImageCompletionBlock)completedBlock;

o2) - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options completed:(SDWebImageCompletionBlock)completedBlock;

их единственная разница-дополнительная


добавлять SDWebImageOptions для вызова метода Исправлена проблема:

imageView.sd_setImage(with: someUrl,
          placeholderImage: someImage,
                   options: [], 
                 completed: someCompletitionBlock)