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;
它们唯一的区别是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!)
因为 options
已被转换为可选参数(默认分配为空数组),在 Swift 中调用 s1 会导致不明确的使用。 调用 s2 可能只是具有相同的实现。
在 Swift 代码中提供这样的方法时,应将options
参数作为可选项添加到单个函数实现中。
解决方法
作为解决方法,可以将 options
参数设置为o1或o2,或者暂时重命名直到SDWebImage被翻译为Swift。