Swift / Cocoa:launchApplication(at:options:configuration :)和捕获错误

问题描述 投票:0回答:1

所以...我想使用此功能在给定的URL上启动应用程序。问题是,开发人员文档说:

参数

网址

应用程序URL。

选项

启动应用程序时使用的选项。有关可能的值,请参阅NSWorkspace.LaunchOptions。

组态

包含配置选项的字典。此字典可用于将其他选项传递给应用程序。工作空间启动配置选项中描述了可能的键值对。配置字典可以为空,在这种情况下应用默认行为。

错误

如果无法启动应用程序,则返回引用错误。如果您不想要错误信息,可以为此参数指定nil。

回报价值

如果应用程序已在运行,并且未在选项字典中指定newInstance,则返回对现有应用程序的引用;否则返回一个新的应用程序引用。如果无法启动应用程序,则返回nil并错误地指定错误。

问题是,这根本不符合函数签名,即:

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

我到底应该指出所说的错误?

swift cocoa documentation appkit
1个回答
2
投票

除错误处理外,文档中提到的参数与实际方法完全匹配。两者都有urloptionsconfiguration。但是,由于Swift具有参数标签的能力,您在实际调用该方法时使用aturl参数。

大多数具有NSError **error的最后一个参数的Objective-C API在Swift中被转换为没有错误参数的API。相反,他们宣称他们是throw

如果您阅读了所引用方法的其余文档,您将看到:

在Swift中处理错误:

在Swift中,此方法返回非可选结果,并使用throws关键字标记,以指示在失败的情况下它会引发错误。

您可以在try表达式中调用此方法,并处理catch语句的do子句中的任何错误,如Error HandlingThe Swift Programming Language中的About Imported Cocoa Error Parameters所述。

您处理错误如下:

do {
    // pass real options and configuration as needed
    try someWorkspace.launcApplication(at: someURL, options: [], configuration: [:])
} catch {
    // handle error here as needed
    print(error)
}
© www.soinside.com 2019 - 2024. All rights reserved.