如何在Swift 3中使用UnsafePointer

时间:2016-10-26 12:08:20

标签: swift swift3 c-strings unsafe-pointers

我正在尝试使用Martin R的功能作为这个问题的答案:Get terminal output after a command swift

然而,UnsafePointer系列不再适用于Swift 3,而我很难搞清楚它。我如何将此代码改编为Swift 3?

if var string = String.fromCString(UnsafePointer(outdata.bytes)) {
    string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
    output = string.componentsSeparatedByString("\n")
}

ps,你需要"导入Cocoa"如果你想尝试使用这个功能。

1 个答案:

答案 0 :(得分:2)

在Swift 3中,readDataToEndOfFile()返回Data值,而不是NSData。 你的直接问题的答案是

let data: Data = ...
let string = data.withUnsafeBytes { String(cString: UnsafePointer<CChar>($0)) }

然而,这需要NUL终止的字节序列(因此不是 我在Get terminal output after a command swift的最聪明的想法,我会更新 以后)。

更好地使用String(data: encoding:)

let outdata = outpipe.fileHandleForReading.readDataToEndOfFile()
if var string = String(data: outdata, encoding: .utf8) {
    string = string.trimmingCharacters(in: .newlines)
    output = string.components(separatedBy: "\n")
}