Xcode更新后,编译器开始在工作代码上抛出错误(两个函数都在AppDelegate.swift中)。
func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool
{
FBLoginView.self
FBProfilePictureView.self
return true
}
有错误:
/ Users /../ AppDelegate.swift:14:11:Objective-C方法'application:didFinishLaunchingWithOptions:'由方法'application(:didFinishLaunchingWithOptions :)提供'与可选的需求方法'应用程序冲突(<协议'UIApplicationDelegate'中的/ em>: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
}
有错误
/ Users /../ AppDelegate.swift:25:11:Objective-C方法 'application:openURL:sourceApplication:annotation:'由method'应用程序提供(:openURL:sourceApplication:annotation :)'与可选的需求方法'application(:openURL:sourceApplication:annotation :)'冲突protocol'UIApplicationDelegate'
我明白我很可能希望你把这两个功能合二为一。我不明白为什么这个代码在6.3中突然停止工作,尽管它在6.2中工作。
答案 0 :(得分:76)
我不确定编译器为什么会抛出错误,但是我确实看到了这些相同方法的默认Swift版本的差异。也许您可以将函数声明替换为使用普通Swift项目创建的函数声明:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
我建议用上面的方法替换你的方法声明,看它现在是否编译。
编辑1(2015年9月21日):我已经确认这些是Xcode 7公开发布的最新版本。他们在声明#2中删除了可选(annotation: AnyObject?
)并制作了它(annotation: AnyObject
)。
答案 1 :(得分:24)
didFinishLaunchingWithOptions 函数的 launchOptions 参数的类型在XCode 6.3中已更改:
&#34; launchOptions:NSDictionary?&#34;已成为&#34; launchOptions:[NSObject:AnyObject]?&#34;
只需更改您的函数标题即可匹配以下内容:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
答案 2 :(得分:5)
您还应该确保使用的是正确的类型。使用字符串代替 NSString 。
答案 3 :(得分:2)
尝试再次从Xcode完成覆盖该方法。为我工作。
答案 4 :(得分:0)
launchOptions已被更改;尝试更换&#34; launchOptions:NSDictionary?&#34; to&#34; launchOptions:[NSObject:AnyObject]?&#34;
希望这有帮助!