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]?"
希望这能有所帮助!