ios - Xcode 12 中的混合 Swift / Objective-C 项目:为什么 UIImageView.setImage 未知?
问题描述
我刚刚从 Xcode 11 更新到 12,并尝试编译一个使用 Objective-C 和 Swift 5 的现有项目。
这失败了很多错误,说UIImage
没有setImage
方法:Value of type 'UIImageView' has no member 'setImage'
这很奇怪,因为在 Xcode 11 中这没有任何问题。在 Xcode 12 中创建一个全新的项目时,我遇到了同样的错误,但是将代码更改为可以someImageView.image = ...
正常工作。
但是,someImageView.image = ...
在我现有的项目中失败了Cannot assign to value: 'image' is a method
.
为什么在新项目中编译的相同代码在我现有的项目中会失败?
快速将新图像分配给 UIImageView 的正确方法是什么?
// Fails in Xcode 12 in existing and new project
// Compiles in Xcode 11 in existing project
someImageView.setImage(someImage)
// ==> `Value of type 'UIImageView' has no member 'setImage'
// Fails in Xcode 12 in existing project
// Compiles in Xcode 12 in new project
someImageView.image = someImage
// ==> Cannot assign to value: 'image' is a method
编辑:
遵循@PhillipMills 的想法,我现在找到了一个UIView
实现image()
方法的扩展:
@interface UIView( Image )
-(UIImage *) image;
-(void) savePNG:(NSString *)filePath;
-(void) saveJPEG:(NSString *)filePath :(float)quality;
@end
这是在 UIImageView 中处理 PDF 图像的扩展的一部分。另一方面,Swift 版本的UIImageView
实现image
如下:
open class UIImageView : UIView {
...
open var image: UIImage? // default is nil
}
在 Xcode 11 和 12 中都someImageView.image = ...
失败,并且命令单击image
无法解决,只显示?
.
虽然 Xcode 11 解析someImageView.image()
为UIImageView
,但UIView
Xcode 12 中的扩展名也是如此。这是为什么呢?
在 Xcode 11someImageView.setImage(...)
中被解析为,UIImageView
而在 Xcode 12 中同样失败。
setImage()
在 Xcode 11 和 12 中使用 Objectiv-C 中的方法都没有问题。
问题:
- 为什么
someImageView.setImage(...)
在 Xcode 12 中不可用? - 为什么
someImageView.image()
在 Xcode 11 和 12 中的解析方式不同?
解决方案
我很确定您的项目或第 3 方库具有用于导出方法名称图像的 UIView 扩展。我的情况是用于导出 UIView 图像的 image 方法。结果是 imageview.image 正在成为一种方法,并且 swift 会自动为您的 UIImageView 生成方法 setImage。原因?UIImageView 是 UIView 的子类。相信我,开始搜索你项目的每一个角落,仔细检查每个 3rd 方库,尤其是那些不是很流行的库。
推荐阅读
- javascript - 通过 onclick .js更改
- reactjs - DetailsList - Office UI Fabric - 如何在单击该行的按钮时突出显示该行?
- timer - 让进度条在我指定的时间段内运行
- paypal - Paypal 直接付款 API 参数
- asp.net - Server.Execute() 调用asp文件后再次执行点击处理程序
- javascript - 减少数组js中的条件
- css - 如何从任何页面 CSS Ionic 4 更改菜单背景
- flutter - 如何在颤动的列表中选择一个复选框
- java - 对象相等/哈希码与 JPA/Hibernate 实体相等/哈希码
- azure - 我应该在 Azure AD B2C 中同时注册前端应用和 api 应用吗?