2016-11-11 53 views
2

所以我嘗試了學習Swift以重新創建我的程序,沒有工作得很好,我也沒有走得很遠。嘗試通過調用函數從Obj-C++源代碼運行我的C++函數,並沒有奏效,並且在第一次關閉它後,項目拒絕再次打開。首先我沒有發現面向對象的編程非常直觀,所以我想避免Obj-C。如何從Cocoa應用程序運行Automator工作流/服務?

我已經有一個Automator獨立工作流和一個服務(做同樣的事情),它得到我需要的程序,顯示確認,在終端窗口中使用stdout運行程序,並在退出之前顯示通知。這是我按下特定按鈕時需要執行的所有操作。

那麼我該如何將這個按鈕鏈接到Swift中的Automator func run()塊?我知道需要使用的命令,但正如我所說,我沒有發現面向對象的編程非常直觀,所以我需要知道使用該函數的上下文。在實踐中下面的塊是否足夠了,還是需要更多的規範?

@IBOutlet weak var testButton(NSButton!) 
@IBAction testButton(_ sender: AnyObject) 
    { 
    let guard Bundle.main.path(forName: "test",forType:"workflow") 
    else 
    { 
     print("Could not find 'test.workflow'") 
     return 
    } 
    let URL="//location of file" 
    class func run(at: URL, withInput: nil) 
    } 

我錯過了一些關於如何做到這一點或者是上述不夠?其次,有人請舉例說明文件位於捆綁的「資源」文件夾中的文件URL的格式? 也是class仍然是單詞類,或者我應該指定一個自定義類?有人可以給我一個實際的這個塊/概念的真實世界的例子嗎?

回答

1

這裏有一個testButton功能應該工作:

@IBAction func testButton(_ sender: AnyObject) { 
    guard let workflowPath = Bundle.main.path(forResource: "test", ofType: "workflow") else { 
     print("Workflow resource not found") 
     return 
    } 

    let workflowURL = URL(fileURLWithPath: workflowPath) 
    do { 
     try AMWorkflow.run(at:workflowURL, withInput: nil) 
    } catch { 
     print("Error running workflow: \(error)") 
    } 
} 

注:

  1. 您需要import Automator在你的源文件的頂部,以便雨燕編譯器識別AMWorkflow
  2. 您需要將test.workflow添加到您的項目中
相關問題