【问题标题】:How to use UnsafePointer with Swift 3如何在 Swift 3 中使用 UnsafePointer
【发布时间】:2016-10-26 12:08:20
【问题描述】:

我正在尝试使用 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,如果您想尝试使用该功能,则需要“导入可可”。

【问题讨论】:

  • 再次考虑引用的代码,使用String.fromCString() 可能不是最好的解决方案。我稍后会更新。

标签: swift swift3 c-strings unsafe-pointers


【解决方案1】:

在 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")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多