使用Swift 3模糊地使用'sd_setImage(with:placeholderImage:completed :)'

car*_*hwa 28 ios sdwebimage swift3 xcode8

我正在使用SDWebImagemy 进行以下调用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
            ...
    });
Run Code Online (Sandbox Code Playgroud)

错误是:

模糊地使用'sd_setImage(with:placeholderImage:completed :)'

我怀疑我在完成的处理程序的签名中有问题,但我无法弄清楚语法应该是什么.我错过了什么?

M_G*_*M_G 58

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;
Run Code Online (Sandbox Code Playgroud)

它们唯一的区别是o2中的附加options参数.

生成的Swift声明:

s1) open func sd_setImage(with url: URL!, placeholderImage placeholder: UIImage!, completed completedBlock: SDWebImage.SDWebImageCompletionBlock!)

s2) open func sd_setImage(with url: URL!, placeholderImage placeholder: UIImage!, options: SDWebImageOptions = [], completed completedBlock: SDWebImage.SDWebImageCompletionBlock!)
Run Code Online (Sandbox Code Playgroud)

因为options被转换为可选参数(默认分配一个空数组),在Swift中调用s1会导致模糊使用.调用s2可能只是具有相同的实现.在Swift代码中提供这样的方法时options,可以在单个函数实现中将参数添加为可选参数.

解决方法

作为一种解决方法,options可以设置参数,或者可以暂时重命名o1o2,直到SDWebImage转换为Swift.

  • 好点.谢谢.另外这里是lien,它修复了临时碰撞问题:yourImageView.sd_setImage(with:yourUrl,placeholderImage:yourPlaceholderImage,options:SDWebImageOptions(),completed:yourImageTransitionCompletitionBlock) (11认同)

bud*_*ino 19

添加SDWebImageOptions到方法调用可以解决问题:

imageView.sd_setImage(with: someUrl,
          placeholderImage: someImage,
                   options: [], 
                 completed: someCompletitionBlock)
Run Code Online (Sandbox Code Playgroud)