2016-12-26 7 views
4

に私はベースとして取っスウィフト2それを作る方法を説明するソースがたくさんあります:Swift 3でデータをIntに変換するには?

var value: Int = 0 
let data: NSData = ...; 
data.getBytes(&value, length: sizeof(Int)) 

その後、私は更新構文/命名によるへスウィフト3

var value: Int = 0 
let data: NSData = ...; 
data.copyBytes(to: &value, count: MemoryLayout<Int>.size) 
は、

それでも動作しません。コンパイラはvalueのタイプが気に入らない、それはUInt8でなければならないと言います。しかし、私はIntがほしいです。誰も私はこれをどのように達成することができますか?

+1

注意が壊れやすいです。異なる "エンディアン"のプラットフォーム間で値を交換しようとすると、間違った結果が得られます。 iOSデバイス、Mac、Windows PCはすべてリトルエンディアンですが、他のハードウェアはビッグエンディアンです。 –

+2

[データとのやりとりの往復の数値型](http://stackoverflow.com/questions/38023838/round-trip-swift-number-types-to-from-data)をご覧ください。 –

+0

ありがとうございます。私はあなたの点に注意を払うでしょう。 –

答えて

4

たぶん、このようにしてみてください:int型への生データをコピー

var src: Int = 12345678 
var num: Int = 0 // initialize 

let data = NSData(bytes: &src, length: MemoryLayout<Int>.size) 
data.getBytes(&num, length: MemoryLayout<Int>.size) 
print(num) // 12345678 
+1

迅速な回答ありがとうございます。私はこれを試してみましたが、 '' getBytes(_:length :) 'は' copyBytes(to:count :) 'という名前に変更されました。それと同時に、それは遊び場で働く。奇妙な。 –

+0

はい、それは変です。どのバージョンのXcodeを使用していますか?私は8.2で、問題なくコンパイルします。私は自分のコードをコピーしたときに 'Int'ではなく' NSInteger'を使用しましたが、疑わしいことに気付きました。 –

+0

鉱山は8.1です。それはあなたのプロジェクトでうまくいくのですか? –

関連する問題