' INT1'不能转换为Bool'初始化程序中的三元运算符出错

时间:2017-02-02 21:52:38

标签: swift

以下代码在Xcode 8.2.1中给出了一个错误:

UIColor(red: redSwitch.isOn ? 1 : 0, green: greenSwitch.isOn ? 1 : 0, blue: blueSwitch.isOn ? 1 : 0 )

错误是:

  

' INT1'不可转换为' Bool'

为什么? redSwitch.isOnif语句条件下正常工作。 Apple参考documentation says UISwitch.isOn returns Bool

如何让它发挥作用?

2 个答案:

答案 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;