2016-12-26 108 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

注意,複製原始數據轉換成一個int是脆弱的。如果你嘗試在不同的「endian-ness」平臺之間交換數值,你會得到錯誤的結果。 iOS設備,Mac電腦和Windows電腦都是小端,但其他硬件則是大端。 –

+2

看看[往返數據的Swift數字類型](http://stackoverflow.com/questions/38023838/round-trip-swift-number-types-to-from-data)。 –

+0

謝謝你們。我會關注你的觀點。 –

回答

4

也許嘗試這樣的:

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,編譯沒有問題。我注意到當我複製我的代碼時,我使用了'NSInteger'而不是'Int',但是有疑問的是它有效果。 –

+0

礦是8.1。它在你的項目中有效嗎? –