let data = NSData(bytes: &positionValue, length: sizeof(UInt8))
和
let dataString=NSString(bytes: &data, length: sizeof(UInt8), encoding: NSUTF8StringEncoding)
不幸的是,编译器会引发第二行的错误,认为它不能分配给NSData类型的不可变值。我将如何去将我的原始data
变量转换为编码SUTF8StringEncoding
的字符串?
let data = NSData(bytes: &positionValue, length: sizeof(UInt8))
和
let dataString=NSString(bytes: &data, length: sizeof(UInt8), encoding: NSUTF8StringEncoding)
不幸的是,编译器会引发第二行的错误,认为它不能分配给NSData类型的不可变值。我将如何去将我的原始data
变量转换为编码SUTF8StringEncoding
的字符串?
更新:的Xcode 7.2•斯威夫特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"
}
谢谢莱昂纳多!这对我有效。此外,你们都说过同样的事情,但保罗后来回答,所以我选择你们作为答案。 –
@RossM。欢迎您光临 –
我并不很清楚你想达到什么样的,因为它没有解释什么positionValue
是(这似乎是一些字节值)。
无论如何,错误信息都是由于您使用了&
而产生的常量(由let
创建)引起的。 &
提供了一个不安全的指针,它允许对包含常量值的内存进行操作,但不能更改常量,所以Swift会给出错误消息。
如果更改第一行改为
var data = NSData(bytes: &positionValue, length: sizeof(UInt8))
然后data
不再是一个常数,而是一个变量,你可以使用&
它。
说了这么多,因为data
包含要转换为字符串的字节(S),你就可以说
let data = NSData(bytes: &positionValue, length: sizeof(UInt8))
let dataString=NSString(data: data, encoding: NSUTF8StringEncoding)
谢谢保罗!我欣赏背景解释!您发布的代码适合我。 –
http://stackoverflow.com/a/28522827/2303865 –
莱昂纳多,有没有办法避免使用扩展来实现这个解决方案?对不起,如果这是一个愚蠢的问题,但我是新的斯威夫特。 –