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 编译。
在 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 编译。