2014-10-07 606 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