Swift 3错误:“二元运算符'/'不能应用于两个'int'操作数”

时间:2016-11-29 16:02:16

标签: ios swift swift3

我知道有一个问题具有相同的标题,但我认为这是一个不同的问题,因为我无法用提供的解决方案来解决它。相关问题是:Binary operator '/' cannot be applied to two (Int) operands。我也看过应该是原版的问题。

但是我在尝试使用UIColor函数中的变量时遇到此错误:

工作

UIColor(red: 74/255, green: 24/255, blue: 141/255, alpha: 1)

不起作用

var colorRGB = 74
UIColor(red: colorRGB/255, green: 24/255, blue: 141/255, alpha: 1)

所以我无法理解为什么我的错误发生了。它抛出了以下错误:

  

二进制运算符'/'不能应用于两个'int'操作数

我认为它会是相同的,因为在两种情况下都是相同的值,但我得到了那个错误。我认为在第一个例子中还有两个int值,它不会抛出该错误。

如何在我的函数中使用变量?

提前致谢!

1 个答案:

答案 0 :(得分:8)

UIColor构造函数需要四个CGFloat个参数。

UIColor(red: 74/255, green: 24/255, blue: 141/255, alpha: 1)

编译,因为CGFloat符合ExpressibleByIntegerLiteral 协议。从编译器尝试创建的上下文 74/255 CGFloat,并将所有数字解释为CGFloat 文字,/作为CGFloat除法运算符。

这不适用于

var colorRGB = 74
UIColor(red: colorRGB/255, green: 24/255, blue: 141/255, alpha: 1)

74字面值没有上下文,因此它被采用 默认为Int。但没有 合适的除法运算符使colorRGB/255成为CGFloat

您必须使用正确的类型明确定义变量:

var colorRGB: CGFloat = 74
UIColor(red: colorRGB/255, green: 24/255, blue: 141/255, alpha: 1)

备注:这也可以编译:

var colorRGB = 74
UIColor(red: CGFloat(colorRGB/255), green: 24/255, blue: 141/255, alpha: 1)

但是colorRGB/255成为整数除法并进行评估 为零,比较Strange Swift numbers type casting