2015-04-23 49 views
3

斯威夫特無法指定類型的不可變的值NSData的

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

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

不幸的是,編譯器會引發第二行的錯誤,認爲它不能分配給NSData類型的不可變值。我將如何去將我的原始data變量轉換爲編碼SUTF8StringEncoding的字符串?

+0

http://stackoverflow.com/a/28522827/2303865 –

+0

萊昂納多,有沒有辦法避免使用擴展來實現這個解決方案?對不起,如果這是一個愚蠢的問題,但我是新的斯威夫特。 –

回答

3

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

謝謝萊昂納多!這對我有效。此外,你們都說過同樣的事情,但保羅後來回答,所以我選擇你們作爲答案。 –

+0

@RossM。歡迎您光臨 –

3

我並不很清楚你想達到什麼樣的,因爲它沒有解釋什麼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) 
+0

謝謝保羅!我欣賞背景解釋!您發佈的代碼適合我。 –

相關問題