2014-10-07 267 views
4

在Objective-C轉換的整數NSData的代碼看起來很喜歡這個,斯威夫特

NSInteger random = arc4random_uniform(99) + 1 
    NSData *data = [NSData dataWithBytes:& random length: sizeof(random)]; 

但是,當我嘗試這樣做的雨燕,

let random:NSInteger = NSInteger(arc4random_uniform(99) + 1) //(1-100) 
    let data = NSData(bytes: &random, length: 3) 

它給了我一個錯誤停留認爲「NSInteger的是無法轉換爲@lvalue INOUT $ T1

任何幫助將不勝感激!

+0

你真的知道哪一行?第一個看起來有點奇怪(儘管我還沒有在Swift中做過什麼)。嘗試'Int'而不是'NSInteger' – borrrden 2014-10-07 01:14:15

+0

感謝您的迴應。當我在Swift中聲明數據變量時出現錯誤。 Objective-C的方式確實很時髦,但它的工作原理! – dhint4 2014-10-07 01:19:04

+1

順便說一句'sizeof(random)'可以是4或8,但從不是3 – 2014-10-07 01:23:52

回答

6

當你要以這種方式發送一個指向變量的參數作爲參數時,變量需要是可變的(即用var聲明),因爲接收函數或方法將能夠直接修改變量。你想要的代碼是:

var random = NSInteger(arc4random_uniform(99) + 1) //(1-100) 
let data = NSData(bytes: &random, length: 3) 

你可以閱讀更多關於Using Swift with Cocoa and Objective-C: Interacting with C APIs使用UnsafePointer<Void>

+1

Nate,謝謝!問題解決了! – dhint4 2014-10-07 01:27:52

+0

+1我完全看錯了地方! – borrrden 2014-10-07 02:02:53

+11

'長度:3'看起來可疑:) – 2014-10-07 17:38:58