2016-04-21 46 views
-3

我是一個完整的快速noob。在xcode中使用這個代碼,我得到了我需要的結果。我創建了一個需要幾個參數的命令行二進制「菜單欄」。我通常在終端「/ bin/menubar getip」,「/ bin/menubar/getuser」中運行它。我想根據以下工作代碼創建一個函數。斯威夫特NStask函數

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) 

我想將其轉換爲函數。

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什麼問題呢? – Slayter

+0

「我得到了我需要的結果」聽起來不錯。問題是什麼? – matt

+0

對不起,我沒有說清楚。我試圖將其轉換爲可重用的函數。所以我可以通過不同的論點。 – nyitguy

回答

1

試試這個:

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

我收到「return result_s」的異常無法轉換類型爲「NSString?」的返回表達式?返回類型「字符串」 – nyitguy

+0

編輯函數 – Slayter

+0

謝謝你的作品。 – nyitguy