Swift 1.2 中的 .getBytes() 会带来麻烦

.getBytes() in Swift 1.2 gives trouble

在 Swift 1.2 中,我正在尝试编译我在 rosettacode.
上找到的 md5 实现 一行给我一个错误,我不知道为什么。

这是行:

chunk.getBytes(M[x], range:range)

这是我得到的错误:

Cannot invoke 'getBytes' with an argument of type'(UInt32, range: _NSRange)'

这是上下文:

// break chunk into sixteen 32-bit words M[j], 0 ≤ j ≤ 15
let wordSize = sizeof(UInt32)
var M:[UInt32] = [UInt32](count: 16, repeatedValue: 0)
for x in 0..<M.count {
    var range = NSRange(location:x * wordSize, length: wordSize)
    chunk.getBytes(M[x], range:range)
}

(顺便说一句,同一行在 Swift 的先前版本中运行良好)

感谢任何见解!

在 Swift 1.1 中工作的代码是(注意 & 运算符):

chunk.getBytes(&M[x], range:range)

但这确实不能再用 Swift 1.2 编译了。 您可以用等效代码替换该行

withUnsafeMutablePointer(&M[x]) { chunk.getBytes([=11=], range:range) }

或使用临时变量

var tmp = UInt32(0)
chunk.getBytes(&tmp, range:range)
M[x] = tmp

让它再次工作。

但请注意,实际上根本不需要循环,而且您的 代码可以简化为

let wordSize = sizeof(UInt32)
var M = [UInt32](count: 16, repeatedValue: 0)
chunk.getBytes(&M, length: M.count * wordSize)

使用 Swift 1.1 和 1.2 编译。