Swift / Cocoa: запуск приложения (по адресу: options: configuration :) и отлов ошибок - PullRequest
0 голосов
/ 25 апреля 2019

Итак ... Я хочу запустить приложение по заданному URL с помощью этой функции.Проблема в документации разработчика:

Параметры

url

URL приложения.

параметры

Параметры, используемые при запуске приложения.См. NSWorkspace.LaunchOptions для возможных значений.

configuration

Словарь, содержащий параметры конфигурации.Этот словарь можно использовать для передачи дополнительных опций в приложение.Возможные пары ключ-значение описаны в разделе Параметры конфигурации запуска рабочей области.Словарь конфигурации может быть пустым, и в этом случае применяется поведение по умолчанию.

error

Возвращает, по ссылке, ошибку, если приложение не удалось запустить.Вы можете указать nil для этого параметра, если вам не нужна информация об ошибке.

Возвращаемое значение

Если приложение уже запущено, и newInstance не указывается в словаре параметров, затем возвращается ссылка на существующее приложение;в противном случае возвращается новая ссылка на приложение.Если приложение не удалось запустить, возвращается nil , а ошибка указана в error .

Проблема в том, что это не соответствуетс сигнатурой функции вообще, то есть:

func launchApplication(at url: URL, options: NSWorkspace.LaunchOptions = [], configuration: [NSWorkspace.LaunchConfigurationKey : Any]) throws -> NSRunningApplication

Где, черт возьми, я должен указывать указанную ошибку?

1 Ответ

2 голосов
/ 25 апреля 2019

За исключением обработки ошибок, параметры, упомянутые в документации, точно соответствуют фактическому методу.Оба имеют url, options и configuration.Тем не менее, благодаря способности Swift иметь метки аргументов, вы используете at с параметром url при фактическом вызове метода.

Большинство API-интерфейсов Objective C с последним параметром NSError **error переведеныв Swift для API, который не имеет параметра ошибки.Вместо этого они заявляют, что они throw.

Если вы прочитаете остальную часть документации для указанного вами метода, вы увидите:

Обработка ошибок в Swift:

В Swift этот метод возвращает неопциональный результат и помечается ключевым словом throws, указывающим, что в случае ошибки он выдает ошибку.

Этот метод вызываетсяв выражении try и обработайте любые ошибки в предложениях catch оператора do, как описано в Обработка ошибок в Язык программирования Swift и О программеИмпортированные параметры ошибки какао .

Вы обрабатываете ошибку следующим образом:

do {
    // pass real options and configuration as needed
    try someWorkspace.launcApplication(at: someURL, options: [], configuration: [:])
} catch {
    // handle error here as needed
    print(error)
}
...