UInt8枚举上的按位AND运算

时间:2014-10-29 11:33:44

标签: ios swift bitmask

进行以下枚举

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'

2 个答案:

答案 0 :(得分:2)

if (combined & ColliderType.Wall.toRaw()) != 0 { // No Compliation error :[

if语句中的表达式必须是布尔值。 UInt8不是布尔值。指针不是布尔值。可选项不是布尔值。比较给予布尔值。

这实施了良好的编码实践;你被迫编写你应该用C或C ++或Objective-C编写的代码。

答案 1 :(得分:2)

这是因为combined & ColliderType.Wall.toRaw()返回UInt8if期待BooleanType

if (combined & ColliderType.Wall.toRaw()) != 0 {
}

应该有用。