2016-10-26 3 views
-1

Я пытаюсь использовать функцию сделанные Martin R в качестве ответа на этот вопрос: Get terminal output after a command swiftКак использовать UnsafePointer с Swift 3

Однако линия UnsafePointer больше не работает с Swift 3 и у меня возникают проблемы выясняя это. Как мне адаптировать этот код к Swift 3?

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

ps, ​​вам нужно «импортировать какао», если вы хотите попробовать эту функцию.

+0

Думая о ссылочного кода снова, используя 'String.fromCString()' не было, возможно, не самое лучшее решение. Я уточню это позже. –

ответ

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") 
} 
Смежные вопросы