IOS Swift二元运算符'< ='不能应用于CGFloat类型的操作数?'和' Int'但是' =='作品

时间:2018-03-26 02:36:14

标签: ios swift

我理解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?)

我的问题是为什么一个工作而另一个是错误?

2 个答案:

答案 0 :(得分:8)

你误解了为什么第一个案例有效:200是一个数字文字,编译器看到你正在检查这个文字是否与Optional<CGFloat>相等,所以它将200解释为CGFloat。由于Optional<CGFloat>是零或实际数字,您可以测试它是否等于200。

第二种情况是关于两个值的排序。编译器没有关于对实际值进行排名nil的规则。你必须自己做出决定。

在你的情况下,我认为这是你真正想要的:

if let width = image?.size.width, width <= 200 {
 // CODE
}

答案 1 :(得分:1)

这只是因为你没有解开你的浮点值ignorer来进行比较。

您无法将可选项与非可选项进行比较以获取订单。

即使你有两个CGFloat作为CGFLoat?和其他非可选的CGFloat,你可以等于“==”他们,但你不能通过“&lt;”,“&gt;”,“&gt; =”,“&lt; =”运算符

得到订单

enter image description here