我编写了一些 Swift 2.2 代码来与OpenSSL
C API 交互,现在我正试图将其转换为 Swift 3。
在斯威夫特 2
let octets = pkcs7_d_data(pkcs7_d_sign(receiptPKCS7).memory.contents)
var ptr = UnsafePointer<UInt8>(octets.memory.data)
// now pass pointer by reference
ASN1_get_object(&ptr, &length, &type, &xclass, end - ptr)
在 Swift 3 中,我不得不做出一些改变
// use guard so i dont have to constantly unwrap these values
guard let octets = pkcs7_d_data(pkcs7_d_sign(receiptPKCS7).pointee.contents),
var ptr = UnsafePointer<UInt8>(octets.pointee.data) else {
return nil
}
ASN1_get_object(&ptr, &length, &type, &xclass, end - ptr)
// ^^^ this is now a compiler error
不幸的是,由于这个错误,我不能再通过ptr
引用传递:ASN1_get_object
Cannot pass immutable value as inout argument: Implicit conversion from UnsafePointer<UInt8> to UnsafePointer<UInt8>? requires a temporary
然后其余的错误被切断(没有展开箭头)。
我试过的:
- 将
ptr
分配更改为,UnsafePointer<UInt8>(octets.pointee.data)?
但随后我被告知我现有的分配已经产生了一个可选的 - 更改
UnsafePointer
为UnsafeMutablePointer
这里需要改变什么?