如何将 UnsafePointer 与 Swift 一起使用 3
How to use UnsafePointer with Swift 3
我正在尝试使用 Martin R 制作的函数来回答这个问题:
但是,UnsafePointer 行不再适用于 Swift 3,我无法弄明白。我将如何使此代码适应 Swift 3?
if var string = String.fromCString(UnsafePointer(outdata.bytes)) {
string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
output = string.componentsSeparatedByString("\n")
}
ps,如果您想尝试使用该功能,您需要"Import Cocoa"。
在 Swift 3 中,readDataToEndOfFile()
returns 一个 Data
值,而不是 NSData
。
您的直接问题的答案是
let data: Data = ...
let string = data.withUnsafeBytes { String(cString: UnsafePointer<CChar>([=10=])) }
但是,这需要一个以 NUL 结尾的字节序列(所以这不是
我在 中最聪明的想法,我会更新
稍后)。
最好使用 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")
}
我正在尝试使用 Martin R 制作的函数来回答这个问题:
但是,UnsafePointer 行不再适用于 Swift 3,我无法弄明白。我将如何使此代码适应 Swift 3?
if var string = String.fromCString(UnsafePointer(outdata.bytes)) {
string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
output = string.componentsSeparatedByString("\n")
}
ps,如果您想尝试使用该功能,您需要"Import Cocoa"。
在 Swift 3 中,readDataToEndOfFile()
returns 一个 Data
值,而不是 NSData
。
您的直接问题的答案是
let data: Data = ...
let string = data.withUnsafeBytes { String(cString: UnsafePointer<CChar>([=10=])) }
但是,这需要一个以 NUL 结尾的字节序列(所以这不是
我在
最好使用 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")
}