2017-06-29 6 views
1

Data?に含まれるバイトをC関数に渡そうとしています。 C関数は次のように宣言されています:Swiftのconst void * param:データ?.withUnsafeBytesとUnsafeRawPointer

void func(const void *buffer); 

そして、私のスウィフトは、次のようになります。しかし、これはエラーになり

myData?.withUnsafeBytes { (buffer: UnsafeRawPointer) in 
    func(buffer) 
} 

Cannot convert value of type '()' to closure result type '_' 

私はUnsafePointer<Void>UnsafeRawPointerを変更する場合は、コードが作成されますが、警告が表示されます。

UnsafePointer<Void> has been replaced by UnsafeRawPointer 

これを修正する正しい方法は何ですか?

答えて

2

あなたはvoid *引数を取るC関数への任意のデータポインタを渡すことができますので、問題は別の方法として、あなただけの型注釈を省略し、 コンパイラの推論をさせることができ

myData?.withUnsafeBytes { (buffer: UnsafePointer<Int8>) in 
    myfunc(buffer) 
} 

で解決することができます自動タイプ:

myData?.withUnsafeBytes { (buffer) in 
    myfunc(buffer) 
} 

または

myData?.withUnsafeBytes { 
    myfunc($0) 
} 

興味深いことに、このタイプはUnsafePointer<Void>と推測され、 警告はありません。

+1

ありがとうございました!それは意味があり、私は自分で試してみたはずです – craig65535

+0

@MartinR 300kのおめでとう: – Alexander

+1

@ craig65535:もっと簡単な解決法があります。更新を参照してください。 –

関連する問題