Swift无法分配给NSData类型的不可变值

时间:2015-04-23 03:18:35

标签: ios swift encoding hex nsdata

我有

let data = NSData(bytes: &positionValue, length: sizeof(UInt8))

let dataString=NSString(bytes: &data, length: sizeof(UInt8), encoding: NSUTF8StringEncoding)

不幸的是,编译器在第二行抛出一个错误,说它不能分配给NSData类型的不可变值。如何将原始data变量转换为编码为SUTF8StringEncoding的字符串?

2 个答案:

答案 0 :(得分:3)

更新: Xcode 7.2•Swift 2.1.1

let myTestString = "Hello World"

// converting from string to NSData
if let myStringData = myTestString.dataUsingEncoding(NSUTF8StringEncoding) {

    // converting from NSData to String
    let myStringFromData = String(data: myStringData, encoding: NSUTF8StringEncoding) ?? "Hello World"
}

答案 1 :(得分:3)

我并不清楚你想要实现什么,因为它没有解释positionValue是什么(它似乎是一些字节值)。

无论如何,错误消息来自于&使用常量(由let创建)。 &提供了一个不安全的指针,它允许操作包含常量值的内存,但是你不能改变一个常量,所以Swift给出了一个错误信息。

如果您将第一行更改为

var data = NSData(bytes: &positionValue, length: sizeof(UInt8))

然后data不再是常量,而是变量,您可以使用&

说了这么多,因为data包含你要转换成字符串的字节,你可以说

let data = NSData(bytes: &positionValue, length: sizeof(UInt8))
let dataString=NSString(data: data, encoding: NSUTF8StringEncoding)