2017-12-04 31 views
0

私はCommonCryptoを(https://github.com/sergejp/CommonCryptoの助けを借りて)swiftで初めて使用しようとしています。ここに私のコードは次のとおりです。Swift - タイプ 'UnsafePointer <Any>'の値を予想される引数タイプ 'UnsafePointer <_>'に変換できません。

UnsafeRawPointer(ivData!.withUnsafeBytes 
{(pointer) -> UnsafePointer<Any> in 
    let ivBuffer = pointer 
}) 

エラーは次のとおりです。

何 '_> UnsafePointer <' 予想引数 タイプに

を型 'UnsafePointer' の値を変換できません。 <_>は何ですか?私は何をする必要がありますか?ありがとう。

+0

タイプ。 を削除する必要があると思います。その上に、より多くのコードを文脈として知るのは難しいです。 –

+0

これを実行すると別のエラーが発生するUnsafePointer 'には引数が必要<...> '私は – ewizard

答えて

3

これは文句を言うpointerです。あなたはそれをキャストする必要があります。ここで使用例、MD5ハッシュ作成の一部です:

var rawBytes = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH)) 
    let _ = data.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) in 
     CC_MD5(bytes, CC_LONG(data.count), &rawBytes) 
    } 
+0

を元に戻すように指示しています....' rawBytes'は常に 'UInt8'としてキャストできます?私はAES暗号化を行っています – ewizard

+0

あなたはそれをあなたが望むものにキャストすることができます。はっきりさせるために、キャストする必要があるのは、それを返すためで、 'preBuffer'はキャストしているタイプになります。 https://stackoverflow.com/questions/37680361/aes-encryption-in-swiftの 'Data'を使ってSwift 3の答えを見てみると、その使い方の詳細がわかるかもしれません。 – Don

+0

サイドノート:できるだけ 'if let'や' guard let'を使ってforce-unwrap演算子 '!'を使うのは避けてください。口語訳によると、「!」は「クラッシュオペレータ」として知られています – Don

0

これは私が私のコンテキストでそれを行うために必要な方法ですが、そのあなたがしてUnsafePointerにタイプUnsafePointerを変換することはできませんと言って

let preBuffer = ivData!.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) in 
    return bytes 
} 
let ivBuffer = UnsafeRawPointer(preBuffer) 
関連する問題