将代码转换为Swift 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
}
答案 0 :(得分:0)
这一行做了什么:
string.appendFormat("%02x", [UInt(dataBytes[idx])] as String )
首先,它接受idx
中索引dataBytes
处的字节并将其包装在一个数组中。这是错误消息中引用的数组文字。
接下来它尝试将数组转换为String
- 而不是转换:强制转换。编译器知道这是不可能的,因此错误消息。
幸运的是,您不希望将参数转换为字符串,因为您的格式说明符要求UInt
(%x
),所以您真正想要的只是
string.appendFormat("%02x", UInt(dataBytes[idx]))
至于获取字节,Swift类型Data
有一个函数foreach,它可以方便地迭代字节:
self.forEach { string.appendFormat("%02x", UInt($0)) }