2016-10-26 2 views
-1

私はこの質問への答えとしてマーティンRによって作られた機能を使用しようとしています:Get terminal output after a command swiftスウィフトとUnsafePointerを使用する方法3

しかし、UnsafePointerラインはもはやスウィフト3で動作し、私はトラブルを抱えていますそれを考え出す。このコードをSwift 3にどう対応させるのですか?

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

ps、この機能を使用するには、「Import Cocoa」が必要です。

+0

'String.fromCString()'最善の解決策は、おそらくありませんでしたを使用して、再び参照するコードを考える:使用String(data: encoding:)

良いです。後でそれを更新します。 –

答えて

2

スウィフト3では、readDataToEndOfFile()はの値を返します。NSDataではありません。 あなたの直接的な質問への答えは

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

だろうしかし、それは(そのためにはGet terminal output after a command swiftに 私の賢いアイデアではなかったと私は は後ほど更新します)バイトのNUL終端シーケンスを必要とします。

let outdata = outpipe.fileHandleForReading.readDataToEndOfFile() 
if var string = String(data: outdata, encoding: .utf8) { 
    string = string.trimmingCharacters(in: .newlines) 
    output = string.components(separatedBy: "\n") 
} 
関連する問題