Swift 1.2中的.getBytes()给出了麻烦

时间:2015-02-14 20:32:05

标签: xcode6 swift

在Swift 1.2中,我正在尝试编译我在rosettacode上找到的md5实现 一行给了我一个错误,我无法弄清楚原因。

这是一行:

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

这是我得到的错误:

  

无法使用类型为'(UInt32,范围:_NSRange)'的参数调用'getBytes'

这就是背景:

// 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中运行良好)

感谢您的任何见解!

1 个答案:

答案 0 :(得分:4)

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

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

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

withUnsafeMutablePointer(&M[x]) { chunk.getBytes($0, 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。