【问题标题】:Swift/Cocoa: launchApplication(at:options:configuration:) and catching errorsSwift/Cocoa:launchApplication(at:options:configuration:) 和捕获错误
【发布时间】:2019-04-25 16:32:37
【问题描述】:

所以...我想使用这个函数在给定的 URL 上启动一个应用程序。问题是,开发人员文档说:

参数

网址

应用程序 URL。

选项

启动应用程序时使用的选项。看 NSWorkspace.LaunchOptions 可能的值。

配置

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

错误

如果应用程序无法执行,则通过引用返回错误 被推出。如果不这样做,您可以为此参数指定 nil 想要错误信息。

返回值

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

问题是,这与函数签名根本不匹配,即:

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

我到底应该在哪里指定所述错误?

【问题讨论】:

  • 阅读该文档的其余部分,其中讨论了如何在 Swift 中处理错误。顺便说一句 - 你说它根本不匹配。但它完全匹配,除了错误,所以请澄清你的问题。
  • 我可能有点夸张,但你正在分裂头发。我想我并没有真正要求捕捉错误,而是将其传播给用户。
  • 参数名称完全匹配。有urloptionsconfiguration
  • @rmaddy 没有分叉。所有具有错误参数的 Cocoa 方法都更改了其函数签名,以便删除错误参数并将函数转换为抛出函数。您必须捕获错误并处理它。见docs.swift.org/swift-book/LanguageGuide/ErrorHandling.html

标签: swift cocoa documentation appkit


【解决方案1】:

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

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

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

在 Swift 中处理错误

在 Swift 中,此方法返回一个非可选结果,并用 throws 关键字标记,表示在失败的情况下它会抛出错误。

您在try 表达式中调用此方法并处理do 语句的catch 子句中的任何错误,如Error Handling 中的The Swift Programming LanguageAbout 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)
}

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 2016-09-25
    • 2021-11-22
    • 2016-05-21
    • 2015-10-06
    • 2015-09-28
    • 2019-01-21
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多