如何在 Swift 4 中访问 [UIApplicationOpenURLOptionsKey : Any] 的值?

Posted

技术标签:

【中文标题】如何在 Swift 4 中访问 [UIApplicationOpenURLOptionsKey : Any] 的值?【英文标题】:How can I access values of [UIApplicationOpenURLOptionsKey : Any] in Swift 4? 【发布时间】:2017-12-05 12:51:38 【问题描述】:

我是 Swift 的新手。我希望访问此方法的options 参数内的 sourceApplication 值。

optional func application(_ app: UIApplication, 
                     open url: URL, 
                  options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool

我检查了the documentation,发现UIApplicationOpenURLOptionsKey 是一个结构。它包含一个类型属性:static let sourceApplication: UIApplicationOpenURLOptionsKey

但是当我尝试通过这样做访问sourceApplication 值时:

options.sourceApplication

...抛出此错误:

[UIApplicationOpenURLOptionsKey : Any]”类型的值没有成员“sourceApplication

我想这可能是一个字典,但是键的类型是UIApplicationOpenURLOptionsKey。我不知道如何使用键类型 UIApplicationOpenURLOptionsKey 访问值。

我查看了教程点和其他一些网站,但没有找到解决方案。

我的问题是:

    如何从options 访问名为sourceApplication 的值? 您如何称呼这种类型的参数? ([UIApplicationOpenURLOptionsKey : Any] = [:])?这是字典吗?

【问题讨论】:

【参考方案1】:

Swift 4.2 更新

方法改为:

func open(_ url: URL, 
          options: [UIApplication.OpenExternalURLOptionsKey : Any] = [:], 
          completionHandler completion: ((Bool) -> Void)? = nil)

您可以以相同的方式访问密钥。


options 是一个字典。你应该访问它的sourceApplication key

if let sourceApp = options[.sourceApplication] as? String 
    //work with the value

From Apple's documentation about sourceApplication:

包含向您的应用发送开放 URL 请求的应用的捆绑 ID。值为 NSString 对象。

【讨论】:

非常感谢您的快速回答!现在我明白它是如何完成的了。但是我可以问一下 = [:] 这意味着什么吗? 表示默认为空字典 请注意 UIApplicationOpenURLOptionsKey 是多余的。 (不需要)[.sourceApplication] @LeoDabus 谢谢,我知道了,我是故意这样写的。 (初学者通过这种方式更容易看懂) 评论针对的是OP

以上是关于如何在 Swift 4 中访问 [UIApplicationOpenURLOptionsKey : Any] 的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 Swift 4 重叠或独占访问错误?

如何在 swift 4 中使用 UnsafeMutablePointer

如何在 Swift 3/4 中使用相机获取位置?

在 Metal File 中访问 swift 结构或类

如何在 swift 4 的闭包中分配类属性

如何在没有 microsoft azure 用户的情况下使用 swift 获取访问令牌?