进行以下枚举
enum ColliderType: UInt8 {
case Hero = 0b1
case GoblinOrBoss = 0b10
case Projectile = 0b100
case Wall = 0b1000
case Cave = 0b10000
}
我正在尝试做一些非常简单的事情:
let combined = ColliderType.Hero.toRaw() | ColliderType.Wall.toRaw()
// test 'combined' for the 'Wall' bitmask
if (combined & ColliderType.Wall.toRaw()) { // Compliation error :[
}
我得到的错误如下
类型'UInt8'不符合协议'BooleanType'
答案 0 :(得分:2)
if (combined & ColliderType.Wall.toRaw()) != 0 { // No Compliation error :[
if语句中的表达式必须是布尔值。 UInt8不是布尔值。指针不是布尔值。可选项不是布尔值。比较给予布尔值。
这实施了良好的编码实践;你被迫编写你应该用C或C ++或Objective-C编写的代码。
答案 1 :(得分:2)
这是因为combined & ColliderType.Wall.toRaw()
返回UInt8
而if
期待BooleanType
。
if (combined & ColliderType.Wall.toRaw()) != 0 {
}
应该有用。