2017-09-18 43 views
0

而我的代碼轉換爲夫特3.0我正在一個錯誤使用。我的樣本代碼如下:語境類型「字符串」不能與數組文本

func hexRepresentation()->String { 

    let dataLength:Int = self.count 
    let string = NSMutableString(capacity: dataLength*2) 
    let dataBytes:UnsafeRawPointer = (self as NSData).bytes 

    for idx in 0..<dataLength { 
     string.appendFormat("%02x", [UInt(dataBytes[idx])] as String) 
    } 

    return string as String 
} 
+3

比較[如何將數據轉換爲迅速十六進制字符串(https://stackoverflow.com/questions/39075043/how-到轉換數據到十六進制-string-in-swift)來創建更簡單的方法來創建Data值的十六進制編碼的字符串表示形式。 –

+1

另外,當你實際上需要訪問'Data'對象的字節指針(這是不是這種情況,但仍然)那個時代,這是很多最好使用'.withUnsafeBytes()',而不是鑄造'NSData'並利用其'.bytes',以避免可能導致如果'Data'的存儲被更早收穫比你認爲它會在superhappyfuntimes。 –

+0

......這是我回應他/她以前的問題https://stackoverflow.com/q/46169483/1187415建議:) –

回答

0

這是什麼線做的事:

所有的
string.appendFormat("%02x", [UInt(dataBytes[idx])] as String) 

首先,它需要在指數idx的字節dataBytes並把它封裝在一個數組。這是錯誤消息中引用的數組字面值。

接下來,它試圖將數組轉換爲String - 不轉換:轉換。這個編譯器知道是不可能的,因此是錯誤信息。

幸運的是,你不想參數轉換爲字符串,因爲您的格式說明符要求一個UInt%x),讓你真正想要的這裏只是

string.appendFormat("%02x", UInt(dataBytes[idx])) 

至於獲得字節中,雨燕Data具有功能foreach這是非常方便的迭代字節:

self.forEach { string.appendFormat("%02x", UInt($0)) } 
+0

自我是數據 –

+0

的擴展。如果是用這種「string.appendFormat(」% 02X「 UINT(數據字節[IDX))」有哪些‘鍵入UnsafeRawPointer沒有標會員’ –

+0

@SIlyas所以,如果是的'Data'只需使用一個擴展的錯誤'forEach' – JeremyP

相關問題