我刚刚将我的Xcode更新为6.3.1问题是我的Facebook集成突然产生了奇怪的错误。在此之前(Swift 1.1和Xcode 6.2)完全没有问题。
错误讯息1
/Users/MNurdin/Documents/iOS/xxxxx/AppDelegate.swift:33:41:不能 调用' handleOpenURL'使用类型'的参数列表(NSURL, sourceApplication:NSString?)'
错误讯息2
/Users/MNurdin/Documents/iOS/xxxxx/AppDelegate.swift:32:10: Objective-C方法'应用程序:openURL:sourceApplication:annotation:' 方法提供 '应用(:的OpenURL:sourceApplication:注释:)'与...发生冲突 可选的要求方法 '应用(:的OpenURL:sourceApplication:注释:)'在协议中 ' UIApplicationDelegate'
我的代码
func application(application: UIApplication, openURL url: NSURL, sourceApplication: NSString?, annotation: AnyObject) -> Bool { //error message 1 here
var wasHandled:Bool = FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication) //error message 2 here
return wasHandled
}
答案 0 :(得分:1)
问题是在函数声明中,sourceApplication
是可选的:
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: NSString?, // note, NSString? so optional
annotation: AnyObject) -> Bool
但在致电FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication)
时,sourceApplication
为NSString
,即非可选。
您需要使用sourceApplication
打开输入if-let
值,或将其默认为??
,即FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication ?? "defaultAppName")
,如果您控制声明,则需要更好application
func,首先它不是可选的。
答案 1 :(得分:0)
谢谢@airspeed。我已经完全理解了可选项。所以我现在所做的就像这样
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { //error message 1 here
var wasHandled:Bool = FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication!) //error message 2 here
return wasHandled
}
完美无缺!!