更改为私有或@nonobjc

Posted

技术标签:

【中文标题】更改为私有或@nonobjc【英文标题】:change to private or @nonobjc 【发布时间】:2016-10-05 20:10:16 【问题描述】:

我正在编写一个创建社交媒体类型应用程序的教程。我正在使用 Firebase,并且已经实现了指南中需要的所有东西,除了下面的代码之外,一切都在工作。

表示存在错误并要求修复,但将其设为私有或添加@nonobjc。

这是我的代码:

func application(_ application: UIApplication, open url: URL, sourceApplication: String, annotation: AnyObject?) -> Bool 
    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url as URL!, sourceApplication: sourceApplication, annotation: annotation)

Firebase 网站上有一个代码版本,但它位于 Objective C 中:

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options 

    BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application
                                                                  openURL:url
                                                        sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
                                                               annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];

    return handled;

希望这会有所帮助且有意义。

【问题讨论】:

【参考方案1】:

通常,有关需要将应用委托方法更改为 private@nonobjc 的警告表明应用委托方法签名不正确。考虑:

func application(_ application: UIApplication, open url: URL, sourceApplication: String, annotation: AnyObject?) -> Bool 
    ...

这已被替换为:

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool 
    ...

并且,根据UIApplicationDelegate 协议定义,从 ios 9 开始,this 已被标记为弃用:

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

最后一个版本最接近于您与我们共享的那个 Objective-C 代码示例。

【讨论】:

谢谢 Rob,现在说得通了。

以上是关于更改为私有或@nonobjc的主要内容,如果未能解决你的问题,请参考以下文章

将 Github 页面的 URL 更改为私有

将Google云端硬盘文件从公开更改为私有

使用 terraform 将公共 GKE 更改为私有 GKE 集群

更改状态栏的颜色 [重复]

在更改之前获取输入的旧值并将总值更改为 + 或 -

DataGridViewComboBoxColumn 值更改不会将 RowState 更改为已修改