Swift按位移位操作会产生编译时错误

时间:2014-06-06 04:18:50

标签: swift

似乎按位运算符不能在Swift中使用UInt64变量。

class Polyomino {
    var squares : UInt64 = 0
    var xLength : UInt8 = 0
    var yLength : UInt8 = 0

    func addSquareAt(x : UInt8, y : UInt8) {
        squares |= (UInt64(1) << (x + y * 8))
    }
}

带有按位运算符的行给出了错误&#34;&#34; \ =&#34;使用提供的参数&#34;。以下陈述也是如此:

squares = squares | (UInt64(1) << (x + y * 8))

我认为这是苹果公司的一个错误(可能是错误的)但有没有办法暂时解决这个问题,还是我应该等待Apple修复?或者我可能做错了什么?

1 个答案:

答案 0 :(得分:3)

Swift中的类型安全意味着您无法在不同的数字类型之间执行操作。您正试图将UInt8转换为UInt64,而UInt64不受支持。请尝试将结果转换为func addSquareAt(x : UInt8, y : UInt8) { squares |= 1 << UInt64(x + y * 8) }

{{1}}