在Swift中将整数转换为NSData

5
在 Objective-C 中,代码看起来像这样:
    NSInteger random = arc4random_uniform(99) + 1 
    NSData *data = [NSData dataWithBytes:& random length: sizeof(random)];

但是当我尝试在Swift中这样做时,

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

它给出了一个错误,指出"NSInteger不可转换为@lvalue inout $T1"。
非常感谢您的帮助!

你实际上在哪一行得到了它?第一行看起来有点奇怪(虽然我还没有在Swift中做过太多的事情)。尝试使用Int而不是NSInteger - borrrden
谢谢您的回复。我在Swift中声明数据变量时遇到了错误。虽然Objective-C的方式有点奇怪,但它确实有效! - dhint4
1
顺便提一下,sizeof(random) 可以是 4 或 8,但永远不会是 3。 - Bryan Chen
1个回答

7

当您以这种方式将指向变量的指针作为参数发送时,变量需要是可变的(即使用var声明),因为接收函数或方法将能够直接修改变量。您需要的代码为:

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

您可以阅读有关在与Cocoa和Objective-C一起使用Swift:与C API交互中使用UnsafePointer<Void>的更多信息。

13
“length: 3”看起来有点可疑 :) - Martin R
非常可疑 - Akshansh Thakur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接