C API とやり取りする Swift 2.2 コードをいくつか書きましたがOpenSSL
、現在はそれを 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
ここで何を変更する必要がありますか?