使用 FBSDKApplicationDelegate 时对成员“下标”的模糊引用
Posted
技术标签:
【中文标题】使用 FBSDKApplicationDelegate 时对成员“下标”的模糊引用【英文标题】:Ambiguous reference to member 'subscript' when using FBSDKApplicationDelegate 【发布时间】:2016-09-15 08:51:46 【问题描述】:我更新了swift 3,发现很多错误。这是其中之一:
对成员“下标”的模糊引用
下面一行
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool
FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as? String, annotation: options["UIApplicationOpenURLOptionsAnnotationKey"] as? String)
return true
我不知道我为什么会得到这个,有其他人知道吗?
在以前的版本 7.3.1 swift 2 中运行良好。
【问题讨论】:
【参考方案1】:options
字典的类型已从 [String: AnyObject]
更改为 [UIApplicationOpenURLOptionsKey : Any]
,这意味着您应该使用 UIApplicationOpenURLOptionsKey
下标,而不是像现在这样使用 String
。
试试这个:
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
guard let sourceApplication = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
let annotation = options[UIApplicationOpenURLOptionsKey.annotation] else
return false
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url,
sourceApplication: sourceApplication,
annotation: annotation)
此代码从options
中提取您要查找的密钥并将它们传递给FBSDKApplicationDelegate
。注意使用UIApplicationOpenURLOptionsKey.sourceApplication
和UIApplicationOpenURLOptionsKey.annotation
来访问选项字典中的值。
【讨论】:
您的代码仅在 ios 9.0 以上版本中可用。如果我仍然使用 8.4 版怎么办?谢谢 根据 Apple 的文档,此版本的方法仅适用于 iOS9+。我不确定同时支持 iOS8 和 iOS9 的最佳做法是什么,因为这种方法似乎与两者都不兼容。developer.apple.com/reference/uikit/uiapplicationdelegate/… 是的,也许我需要遵守苹果的规则。谢谢【参考方案2】:这是使用 swift 3 和 Xcode 8 处理 iOS 9 之前和之后的版本的方法
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])
希望对你有帮助!
【讨论】:
以上是关于使用 FBSDKApplicationDelegate 时对成员“下标”的模糊引用的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)