【问题标题】:openUrl command works in Obj-C but not SwiftopenUrl 命令适用于 Obj-C 但不适用于 Swift
【发布时间】:2021-03-23 09:04:25
【问题描述】:

我们的代码库在很大程度上仍然是一个混合代码库,但我一直在尝试在 Swift 中做更多的工作。不幸的是,我遇到了一个奇怪的情况,在 Obj-C 中运行良好的命令绝对拒绝在 Swift 中运行。

我正在尝试将文件从我们的一款桌面产品发送到我们的另一款产品。所有 URL 方案均已正确设置。 Obj-C 中的这个命令完美运行:

[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"ourotherapp://v1/import?filePath=/Users/gi.joe/Documents/test.wav"]];

但是,在尝试使用 Swift 版本时,这个绝对拒绝执行。没有例外,没有线索,没有什么:

NSWorkspace.shared.open(URL(fileURLWithPath: "ourotherapp://v1/import?filePath=/Users/gi.joe/Documents/test.wav"))

NSWorkspace 在 Swift 中的工作方式与在 Obj-C 中的工作方式有什么不同吗?我查看了 Apple 文档,但可能遗漏了什么?

【问题讨论】:

  • 我认为 ObjC 中的 URL(fileURLWithPath:) 对应物是 [NSURL fileURLWithPath:] 而不是 [NSURL URLWithString:],所以从技术上讲这两个调用是不等价的
  • 哇。我看了很多次,我的眼睛都模糊了,我仍然没有注意到这一点。这就是问题所在!

标签: objective-c swift macos nsworkspace


【解决方案1】:

我看到您在 Obj C 和 Swift 中尝试了两种不同的调用。

下面的代码我没试过,也许这个例子对你有帮助:

if let checkURL = NSURL(string: "https://google.com") {
    if NSWorkspace.shared().open(checkURL as URL) {
        print("URL Successfully Opened")
    }
} else {
    print("Invalid URL")
}

【讨论】:

  • 经过多次检查,看来您是正确的!他们确实是两个不同的电话。我觉得自己像个白痴。
  • 太好了!
【解决方案2】:

试试这个:

guard let url = URL(string: "someURL") else { return }
UIApplication.shared.open(url)

【讨论】:

  • 抱歉 - 我在标签中指定了,但看起来我忘了在问题正文中提及,这是 macOS,而不是 iOS。不过,事实证明这个概念是正确的。我使用了错误的参数 - 它应该是 string,而不是 fileURLWithPath
猜你喜欢
  • 1970-01-01
  • 2016-07-17
  • 2011-03-28
  • 2021-05-02
  • 2020-01-13
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2015-02-24
相关资源
最近更新 更多