简体   繁体   English

如何在Swift 3中使用UnsafePointer

[英]How to use UnsafePointer with Swift 3

I am trying to use the function made by Martin R as an answer to this question: Get terminal output after a command swift 我正在尝试使用Martin R的函数作为以下问题的答案: 在命令迅速后获取终端输出

However, the UnsafePointer line no longer works with Swift 3 and I'm having trouble figuring it out. 但是,UnsafePointer行不再适用于Swift 3,我很难弄清楚。 How would I adapt this code to Swift 3? 我将如何将此代码适应Swift 3?

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

ps, You need to "Import Cocoa" if you want to trying using the function. ps,如果您想尝试使用该功能,则需要“导入可可”。

In Swift 3, readDataToEndOfFile() returns a Data value, not NSData . 在Swift 3中, readDataToEndOfFile()返回一个Data值,而不是NSData The answer to your direct question would be 您直接问题的答案将是

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

However, that requires a NUL-terminated sequence of bytes (so that wasn't my smartest idea in Get terminal output after a command swift and I'll update that later). 但是,这需要NUL终止的字节序列(因此,这不是我在迅速处理命令后获取终端输出中最聪明的想法,我将在以后进行更新)。

Better use String(data: encoding:) : 最好使用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")
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM