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

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

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

有错误:

/Users/../AppDelegate.swift:14:11:方法'application( :didFinishLaunchingWithOptions :)'提供的Objective-C方法'application:didFinishLaunchingWithOptions:' 与协议中的可选需求方法'application( :didFinishLaunchingWithOptions :)' 冲突 'UIApplicationDelegate'

第二

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

与错误

/Users/../AppDelegate.swift:25:11:Objective-C方法'application:openURL:sourceApplication:annotation:'方法提供'application( :openURL:sourceApplication:annotation :)'与可选的需求方法'应用程序冲突( :openURL:sourceApplication:annotation :)'in protocol'UIApplicationDelegate'

我明白,最有可能的是,我希望你们把这两个function融合在一起。 我不明白为什么这个代码在6.3中突然停止工作,尽pipe它在6.2中工作。

我不确定编译器为什么会抛出错误,但是我确实看到了这些相同方法的默认Swift版本的差异。 也许你可以把函数声明replace成用普通的Swift项目创build的函数声明:

1

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

2

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

我build议用上面的方法replace你的方法声明,看看它现在编译。


编辑1(9/21/2015):我已经确认这些是Xcode 7公开发布的最新版本。 他们删除了可选项( annotation: AnyObject? ),并在声明#2中annotation: AnyObject了它( annotation: AnyObject )。

didFinishLaunchingWithOptions函数的launchOptions参数的types已在XCode 6.3中更改:

“launchOptions:NSDictionary?” 已经成为“launchOptions:[NSObject:AnyObject]?”

只需更改您的函数标题以匹配以下内容:

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

你也应该确保你使用的是正确的types。 使用String而不是NSString

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

launchOptions已被更改; 尝试改变“launchOptions:NSDictionary?” 到“launchOptions:[NSObject:AnyObject]?”

希望这可以帮助!