无法为UnsafeMutablePointer类型< UInt8>类型调用初始值设定项 [英] Cannot invoke initializer for type UnsafeMutablePointer<UInt8>
问题描述
我试图将我的字符串转换为SHA256散列,但是我得到了下一个错误:
无法调用初始值设定项for使用类型'(UnsafeMutableRawPointer)'
的参数列表输入'UnsafeMutablePointer< UInt8>'这就是我的功能:
func SHA256(data:String) - >数据{
var hash = NSMutableData(length:Int(CC_SHA256_DIGEST_LENGTH))!如果让newData:Data = data.data(使用:.utf8){
let bytes = newData.withUnsafeBytes {(bytes:UnsafePointer< CChar>) - >
,无效
CC_SHA256(字节,CC_LONG(newData.length),UnsafeMutablePointer< UInt8>(hash.mutableBytes))
}
}
返回hash作为数据
$ / code>
所以,对于这部分
UnsafeMutablePointer< UInt8>(hash.mutableBytes)
我得到这个错误:
无法用类型为'(UnsafeMutableRawPointer)的参数列表调用类型为'UnsafeMutablePointer< UInt8& '
如何解决这个问题,以及我做错了什么?
<您最好还是使用
Data
来得到结果 hash $ c> 解决方案
在Swift 3中, withUnsafePointer(_:)
和 withUnsafeMutablePointer( :_)
是泛型类型,当与格式良好的闭包一起使用时,Swift可以正确推断Pointee类型,这意味着您不需要将Point ee手动输入。
func withUnsafeBytes((UnsafePointer) - > ResultType)
func withUnsafeMutableBytes((UnsafeMutablePointer) - > ResultType)
func SHA256 (data:String) - >数据{
var hash = Data(count:Int(CC_SHA256_DIGEST_LENGTH))
如果让newData:Data = data.data(使用:.utf8){
_ = hash。 withUnsafeMutableBytes {$ mutableBytes
newData.withUnsafeBytes {bytes in
CC_SHA256(bytes,CC_LONG(newData.count),mutableBytes)
}
}
}
return hash
}
在Swift 3中, UnsafePointer
和 UnsafeMutablePointer
,用于转换Pointee类型直到Swift 2,被删除。但在很多情况下,你可以在没有指针类型转换的情况下工作。
I'm trying to convert my string into SHA256 hash, but I get the next error:
Cannot invoke initializer for type 'UnsafeMutablePointer<UInt8>' with an argument list of type '(UnsafeMutableRawPointer)'
That's my function:
func SHA256(data: String) -> Data {
var hash = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH))!
if let newData: Data = data.data(using: .utf8) {
let bytes = newData.withUnsafeBytes {(bytes: UnsafePointer<CChar>) -> Void in
CC_SHA256(bytes, CC_LONG(newData.length), UnsafeMutablePointer<UInt8>(hash.mutableBytes))
}
}
return hash as Data
}
so, for this part
UnsafeMutablePointer<UInt8>(hash.mutableBytes)
I get this error:
Cannot invoke initializer for type 'UnsafeMutablePointer<UInt8>' with an argument list of type '(UnsafeMutableRawPointer)'
How can I fix that and what I do wrong?
解决方案 You'd better use Data
also for the result hash
.
In Swift 3, withUnsafePointer(_:)
and withUnsafeMutablePointer(:_)
are generic types and Swift can infer the Pointee types correctly when used with "well-formed" closures, which means you have no need to convert Pointee types manually.
func withUnsafeBytes((UnsafePointer) -> ResultType)
func withUnsafeMutableBytes((UnsafeMutablePointer) -> ResultType)
func SHA256(data: String) -> Data {
var hash = Data(count: Int(CC_SHA256_DIGEST_LENGTH))
if let newData: Data = data.data(using: .utf8) {
_ = hash.withUnsafeMutableBytes {mutableBytes in
newData.withUnsafeBytes {bytes in
CC_SHA256(bytes, CC_LONG(newData.count), mutableBytes)
}
}
}
return hash
}
In Swift 3, the initializers of UnsafePointer
and UnsafeMutablePointer
, which was used to convert Pointee types till Swift 2, are removed. But in many cases, you can work without type conversions of pointers.
这篇关于无法为UnsafeMutablePointer类型< UInt8>类型调用初始值设定项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文