2016-11-11 2 views
2

Итак, я пробовал изучить Swift достаточно хорошо, чтобы воссоздать мои программы в нем, не работал так хорошо, и я не очень далеко. Пробовал запускать мои C++-функции из источника Obj-C++, вызывая функции, не работал, и проект отказался открывать снова после первого закрытия. Во-первых, я не считаю объектно-ориентированное программирование очень интуитивным, поэтому я бы хотел избежать Obj-C.Как запустить Workflow/Service Automator из приложения Cocoa?

У меня уже есть автономный рабочий процесс Automator и служба (то же самое), которая получает нужные мне программы, отображает подтверждение, запускает программу в окне терминала с помощью stdout и выводит уведомление перед выходом. Это все, что мне нужно, чтобы сделать, когда нажата конкретная кнопка.

Так как же я могу связать эту кнопку с автоматом func run() блок в Swift? Я знаю команду, которую нужно использовать, но, как я уже сказал, я не считаю объектно-ориентированное программирование очень интуитивным, поэтому мне нужно знать контекст, в котором эта функция используется. Может ли следующий блок быть достаточным на практике или ему понадобится дополнительная спецификация?

@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) 
    } 

Я пропустил что-то о том, как это сделать или это достаточно выше? Во-вторых, кто-то может указать пример формата файла, где файл находится в папке «Ресурсы»? Также будет ли класс 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 в верхней части исходного файла для того, чтобы Swift компилятора распознают AMWorkflow класса
  2. Необходимо добавить test.workflow к вашему проекту