2016-04-21 14 views
-3

Ich bin eine komplette schnelle noob. Mit diesem Code in xcode bekomme ich das Ergebnis, das ich brauche. Ich habe eine Kommandozeilen-Binärdatei "menubar" erstellt, die mehrere Argumente benötigt. Ich führe es normalerweise im Terminal "/ bin/menubar getip", "/ bin/menubar/getuser". Ich möchte eine Funktion basierend auf dem folgenden Arbeitscode erstellen.Swift NStask Funktion

import Cocoa 
import Foundation 

var task:NSTask = NSTask() 
var pipe:NSPipe = NSPipe() 

task.launchPath = "/bin/menubar" 
task.arguments = ["getip"] 
task.standardOutput = pipe 
task.launch() 

var handle = pipe.fileHandleForReading 
var data = handle.readDataToEndOfFile() 
var result_s = NSString(data: data, encoding: NSUTF8StringEncoding) 
print(result_s) 

Ich möchte es in eine Funktion konvertieren.

func commmand (argument: String) -> String 
{ 

let task:NSTask = NSTask() 
let pipe:NSPipe = NSPipe() 

task.launchPath = "/bin/menubar" 
task.arguments = ["argument"] 
task.standardOutput = pipe 
task.launch() 

let handle = pipe.fileHandleForReading 
let data = handle.readDataToEndOfFile() 
let result_s = NSString(data: data, encoding: NSUTF8StringEncoding) 
return result_s 
} 
commmand getip 
+0

Soooo was das Problem? – Slayter

+0

"Ich bekomme das Ergebnis, das ich brauche" Klingt gut. Was ist die Frage? – matt

+0

Entschuldigung, ich habe es nicht klargestellt. Ich versuche, dies in eine wiederverwendbare Funktion umzuwandeln. So kann ich verschiedene Argumente weitergeben. – nyitguy

Antwort

1

Try this:

func commmand(argument: String) -> String 
{ 

    let task:NSTask = NSTask() 
    let pipe:NSPipe = NSPipe() 

    task.launchPath = "/bin/menubar" 
    task.arguments = [argument] 
    task.standardOutput = pipe 
    task.launch() 

    let handle = pipe.fileHandleForReading 
    let data = handle.readDataToEndOfFile() 
    let result_s = String(data: data, encoding: NSUTF8StringEncoding)! 
    return result_s 
} 

print(commmand("getip")) 
+0

Ich erhalte eine Ausnahme für "return result_s" Kann den Rückgabeausdruck des Typs "NSString" nicht konvertieren. zurückgeben Typ "String" – nyitguy

+0

Bearbeitete die Funktion – Slayter

+0

Danke das funktioniert. – nyitguy