【问题标题】:Swift Cannot Assign to immutable value of type NSData [duplicate]Swift 无法分配给 NSData 类型的不可变值 [重复]
【发布时间】:2023-04-10 16:45:01
【问题描述】:

我有

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

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

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

【问题讨论】:

标签: ios swift encoding hex nsdata


【解决方案1】:

更新: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"
}

【讨论】:

  • 谢谢莱昂纳多!这对我有用。另外,你们俩都说了同样的话,但保罗后来回答了,所以我选择你的作为答案。
  • @RossM。不客气
【解决方案2】:

我不太清楚您要达到什么目的,因为没有解释 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)

【讨论】:

  • 谢谢保罗!我感谢背景解释!您发布的代码对我有用。
猜你喜欢
  • 1970-01-01
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多