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]?”
希望这可以帮助!