以下代码在Xcode 8.2.1中给出了一个错误:
UIColor(red: redSwitch.isOn ? 1 : 0, green: greenSwitch.isOn ? 1 : 0, blue: blueSwitch.isOn ? 1 : 0 )
错误是:
' INT1'不可转换为' Bool'
为什么? redSwitch.isOn
在if
语句条件下正常工作。 Apple参考documentation says UISwitch.isOn
returns Bool
。
如何让它发挥作用?
答案 0 :(得分:3)
这是垃圾邮件错误消息,但问题只是您错过了alpha:
init(red:green:blue:alpha:)
初始化程序中的UIColor
参数。< / p>
let color = UIColor(red: redSwitch.isOn ? 1 : 0, green: greenSwitch.isOn ? 1 : 0,
blue: blueSwitch.isOn ? 1 : 0, alpha: 1)
据我所知,奇怪的错误消息的来源似乎是在convenience
初始化调用中使用三元运算符,而您缺少其中一个参数。
更简单的例子是:
class Foo {
convenience init(a: Int, b: Int) {}
}
let f = Foo(a: true ? 1 : 0) // 'Int1' is not convertible to 'Bool'
我继续向此错误提出错误SR-3839。
答案 1 :(得分:0)
对此错误的另一种看法。
import CoreGraphics
let hit: Bool = true
let returnStroke: Bool = false
let rotation: CGFloat = (hit ? 90 : 120)
rotation *= returnStroke ? -1.0 : 1.0 // 'Int1' is not convertible to 'Bool'
真正的问题是rotation
应该是变量而不是常量。将let
更改为var
会使&#34;可兑换&#34;错误消失,代码将运行。
在将rotation
保持为常量的同时,右侧表达式中的任何数量的括号都不会显示正确的错误消息。该消息是&#34;变异操作员的左侧是不可变的......&#34;