2016-11-11 51 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添加到您的项目中
相关问题