无法为Unsafepointer Swift 3.0types转换初始化variables

嗨我转换现有的swift 2.0代码swift 3.0,但遇到转换时出现错误:

无法使用types为“(UnsafeRawPointer)”的参数列表调用types为“UnsafePointer”的初始化程序

这是我的代码:

extension Data { var hexString : String { let buf = UnsafePointer<UInt8>(bytes) // here is the error let charA = UInt8(UnicodeScalar("a").value) let char0 = UInt8(UnicodeScalar("0").value) func itoh(_ i: UInt8) -> UInt8 { return (i > 9) ? (charA + i - 10) : (char0 + i) } let p = UnsafeMutablePointer<UInt8>.allocate(capacity: count * 2) for i in 0..<count { p[i*2] = itoh((buf[i] >> 4) & 0xF) p[i*2+1] = itoh(buf[i] & 0xF) } return NSString(bytesNoCopy: p, length: count*2, encoding: String.Encoding.utf8.rawValue, freeWhenDone: true)! as String } } 

在Swift 3中,您必须使用withUnsafeBytes()来访问Data值的原始字节。 在你的情况下:

 withUnsafeBytes { (buf: UnsafePointer<UInt8>) in for i in 0..<count { p[i*2] = itoh((buf[i] >> 4) & 0xF) p[i*2+1] = itoh(buf[i] & 0xF) } } 

或者,使用Data是字节集合的事实:

 for (i, byte) in self.enumerated() { p[i*2] = itoh((byte >> 4) & 0xF) p[i*2+1] = itoh(byte & 0xF) } 

请注意,您的代码还有另一个问题:

 NSString(..., freeWhenDone: true) 

使用free()释放内存,这意味着它必须分配malloc()

创buildData值的hex表示的其他(更短,但可能效率更低)方法可以在如何将数据转换为hexstring在swift中find 。