Objective-C方法与可选需求方法Swift冲突



Xcode更新后,编译器开始在工作代码上抛出错误(两个函数都在AppDelegate.swift中)

func application(application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool 
{
    FBLoginView.self
    FBProfilePictureView.self
    return true
}

有错误:

/用户//AppDelegate.swift:14:11:Objective-C方法"application:didFinishLaunchingWithOptions:'由方法提供"应用程序(:didFinishLaunchingWithOptions:)"与协议"UIApplicationDelegate'中的可选需求方法"application(:didFinishLaunchingWithOptions:)"冲突

第二个

func application(application: UIApplication,        
                            openURL url: NSURL,
                            sourceApplication: NSString?,
                            annotation: AnyObject) -> Bool {
    var wasHandled:Bool = FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication as! String)
    return wasHandled
}

错误

/用户//AppDelegate.swift:25:11:Objective-C方法协议'UIApplicationDelegate'中的'application:openURL:sourceApplication:annotation:'provided by method'application(:openURL:sourceApplication:aannotation:)'与可选需求方法'application冲突

我知道,我很可能希望你以某种方式将这两个功能结合在一起。我不明白为什么这个代码在6.3中突然停止工作,尽管它在6.2中工作。

我不确定编译器抛出错误的确切原因,但我确实看到了这些方法的默认Swift版本的不同。也许你可以用普通Swift项目创建的函数声明来代替函数声明:

1

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool

2

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool

我建议用上面的方法声明替换您的方法声明,看看它现在是否可以编译。


第1版(2015年9月21日):我已经确认这些是Xcode 7公开发布的最新版本。他们在声明2中删除了可选的(annotation: AnyObject?)并使其成为(annotation: AnyObject)。

didFinishLaunchingWithOptions函数的launchOptions参数的类型在XCode 6.3:中更改

"launchOptions:NSDictionary?"已变为"launchOptions:[NSObject:AnyObject]?"

只需更改您的功能标题以匹配以下内容:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool

您还应该确保使用了正确的类型。使用字符串而不是NSString

尝试从Xcode完成中再次重写该方法。为我工作。

launchOptions已更改;尝试将"launchOptions:NSDictionary?"更改为"launchOptions:[NSObject:AnyObject]?"

希望这能有所帮助!

相关内容

最新更新