gpt4 book ai didi

ios - 'sd_setImage(with:placeholderImage:completed:)' 与 Swift 3 的不明确使用

转载 作者:IT王子 更新时间:2023-10-29 07:52:15 28 4
gpt4 key购买 nike

我在我的 imageView 上使用 SDWebImage 进行以下调用,它在 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
...
});

错误是:

Ambiguous use of 'sd_setImage(with:placeholderImage:completed:)'

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

最佳答案

Swift 编译器将 ObjC header 翻译成 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 参数,或者可以临时重命名 o1o2,直到 SDWebImage 被翻译成 Swift。

关于ios - 'sd_setImage(with:placeholderImage:completed:)' 与 Swift 3 的不明确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38949214/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com