3

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

ここで何を変更する必要がありますか?

4

1 に答える 1