2016-10-03 5 views
4

迅速に動作しますが、エラーはありません以下metionedラインのためUnsafePointerは、もはや3

let value = UnsafePointer<UInt32>(array1).pointee 

をポップアップ表示 'INIT' は使用できません:使用「withMemoryRebound( to:capacity:_)」を一時的に表示して、別のレイアウト互換タイプとして表示します。それは

let value = UnsafePointer<UInt32>(array1).memory 

のようなものですswift2で

誰かがしてください説明できますか? 私は変数に行くべきか値まだ

let abc = UnsafePointer<UInt32>(array1).withMemoryRebound(to: <#T##T.Type#>, capacity: <#T##Int#>, <#T##body: (UnsafeMutablePointer<T>) throws -> Result##(UnsafeMutablePointer<T>) throws -> Result#>) 

に変更を加えることなく、した後、私は

をswift3するのは非常に新たなんだ申し訳ありませんか?申し訳ありませんが、私の周りを検索していますが、あまりにも悪い私はあなたがこれを試すことができソリューション

+0

'null可能なポインタを返すC関数の結果は、pointeeプロパティ(以前のメモリ)または添え字要素にアクセスする前に明示的にアンラップする必要があります。オプションの連鎖構文はここでもうまくいきます。結果?ポイント=合計。 これは役立ちます... https://swift.org/migration-guide/ –

+1

実際に何をしようとしているかを示してください。 – matt

+0

'array1'とは何ですか' 'UnsafeRawPointer'ですか? – LinShiwei

答えて

6

を見つけることができません。

let rawPointer = UnsafeRawPointer(array1) 
let pointer = rawPointer.assumingMemoryBound(to: UInt32.self) 
let value = pointer.pointee 

生のポインタがuntypeデータにアクセスするためのポインタです。

assumingMemoryBound(to:)は、UnsafeRawPointerからUnsafePointer<T>に変換できます。

参考:Swift 3.0 Unsafe World

0

arrayArrayある場合は、あなたの最善の策は、withUnsafeBufferPointerを使用することです:

array.withUnsafeBufferPointer { buffer in 
    // do something with 'buffer' 
    // (if you need an UnsafePointer rather than an UnsafeBufferPointer, 
    // you can access that via the buffer's .baseAddress property) 
} 

それがするので、あなたが閉鎖からバッファポインタの脱出を聞かせていないことを確認してくださいそれ以外では有効ではありません。

関連する問題