我理解CGFloat和Int之间的区别,但奇怪的是我能够在if循环中使用
if image?.size.width == 200 {
// CODE
}
其中image是一个未包装的UIImage,size.width是CGFloat,而数字200是Int类型,可以在Xcode上运行,没有编译错误。
但是:
if image?.size.width <= 200 {
// CODE
}
Xcode返回错误:
二元运算符&#39;&lt; =&#39;不能应用于CGFloat类型的操作数?&#39; 和&#39; Int&#39;
并且Xcode无法运行。我查看了CGFloat上的Apple文档以及他们的&#39; ==&#39;和&#39;&lt; =&#39;运算符规范,他们确保双方必须是CGFloats,我没有任何扩展处理CGFloats和Int之间的运算符=(除非它在cocoapod?)
我的问题是为什么一个工作而另一个是错误?
答案 0 :(得分:8)
你误解了为什么第一个案例有效:200是一个数字文字,编译器看到你正在检查这个文字是否与Optional<CGFloat>
相等,所以它将200解释为CGFloat
。由于Optional<CGFloat>
是零或实际数字,您可以测试它是否等于200。
第二种情况是关于两个值的排序。编译器没有关于对实际值进行排名nil
的规则。你必须自己做出决定。
在你的情况下,我认为这是你真正想要的:
if let width = image?.size.width, width <= 200 {
// CODE
}
答案 1 :(得分:1)