gpt4 book ai didi

xcode6 - Swift 1.2 中的 .getBytes() 带来了麻烦

转载 作者:行者123 更新时间:2023-11-28 10:24:59 24 4
gpt4 key购买 nike

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

关于xcode6 - Swift 1.2 中的 .getBytes() 带来了麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28520001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com