[英]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.