我刚刚将Xcode更新为6.3.1,问题是我的Facebook集成突然产生奇怪的错误。在此之前(Swift 1.1和Xcode 6.2)根本没有问题。
错误消息1
/Users/MNurdin/Documents/iOS/xxxxx/AppDelegate.swift:33:41:无法
调用类型为((NSURL,
sourceApplication:NSString?)'
错误信息2
/Users/MNurdin/Documents/iOS/xxxxx/AppDelegate.swift:32:10:
Objective-C方法“application:openURL:sourceApplication:annotation:”
方法提供
'application(:openURL:sourceApplication:annotation :)'与
可选要求方法
协议中的'application(:openURL:sourceApplication:annotation :)'
'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
}
最佳答案
问题在于,在函数声明中,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的声明甚至更好,请首先将其设置为非可选。关于ios - 无法使用类型为((NSURL,*:NSString?))的参数列表调用'*',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29975500/