【发布时间】:2019-08-16 18:45:30
【问题描述】:
在 Swift 4 中我们可以使用
var md5: String? {
guard let data = self.data(using: .utf8) else { return nil }
let hash = data.withUnsafeBytes { (bytes: UnsafePointer<Data>) -> [UInt8] in
var hash: [UInt8] = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))
CC_MD5(bytes, CC_LONG(data.count), &hash)
return hash
}
return hash.map { String(format: "%02x", $0) }.joined()
}
但在 Swift 5 中 withUnsafeBytes 使用 UnsafeRawBufferPointer 而不是 UnsafePointer。如何更改md5功能?
【问题讨论】:
-
您可以使用 Swift 迁移助手从 Swift 4.2 到 5.0 来获得针对此类小段代码的解决方案。
-
顺便说一句,你的 Swift 4 代码中的
UnsafePointer<Data>没有意义,它应该是UnsafePointer<UInt8>——它之所以有效,只是因为闭包不依赖于实际的指针类型。