iOS:在swift中将UnsafeMutablePointer 转换为String?

正如标题所说,在swift中将UnsafeMutablePointer转换为String的正确方法是什么?

//lets say x = UnsafeMutablePointer var str = x.memory.???? 

我尝试使用x.memory.description显然它是错误的,给我一个错误的字符串值。

如果指针指向以NUL结尾的UTF-8字节的C字符串,则可以执行以下操作:

 import Foundation let x: UnsafeMutablePointer = ... // or UnsafePointer // or UnsafePointer // or UnsafeMutablePointer let str = String(cString: x) 

时代变了。 在Swift 3+中你会这样做:

如果你想要validationutf-8:

 let str: String? = String(validatingUTF8: c_str) 

如果要将utf-8错误转换为unicode错误符号:

 let str: String = String(cString: c_str) 

假设c_str的类型为UnsafePointerUnsafePointer ,它与大多数C函数返回的类型相同。

这个:

 let str: String? = String(validatingUTF8: c_str) 

似乎不适用于UnsafeMutablePointer (这似乎是我的数据)。

这是我简单地弄清楚如何做类似C / Perl系统function的事情:

 let task = Process() task.launchPath = "/bin/ls" task.arguments = ["-lh"] let pipe = Pipe() task.standardOutput = pipe task.launch() let data = pipe.fileHandleForReading.readDataToEndOfFile() var unsafePointer = UnsafeMutablePointer.allocate(capacity: data.count) data.copyBytes(to: unsafePointer, count: data.count) let output : String = String(cString: unsafePointer) print(output) //let output : String? = String(validatingUTF8: unsafePointer) //print(output!) 

如果我切换到validatingUTF8(可选)而不是cString,我收到此错误:

 ./ls.swift:19:37: error: cannot convert value of type 'UnsafeMutablePointer' to expected argument type 'UnsafePointer' (aka 'UnsafePointer') let output : String? = String(validatingUTF8: unsafePointer) ^~~~~~~~~~~~~ 

关于如何在管道输出上validationUTF8的想法(所以我没有在任何地方获得unicode错误符号)?

(是的,我没有正确检查我的打印选项(),这不是我目前正在解决的问题;-))。