无法调用' *'使用类型'(NSURL,*:NSString?)'的参数列表

时间:2015-04-30 18:49:42

标签: ios swift xcode6

我刚刚将我的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
    }

2 个答案:

答案 0 :(得分:1)

问题是在函数声明中,sourceApplication是可选的:

func application(application: UIApplication, 
        openURL url: NSURL, 
        sourceApplication: NSString?,     // note, NSString? so optional
        annotation: AnyObject) -> Bool

但在致电FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication)时,sourceApplicationNSString,即非可选。

您需要使用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
    } 

完美无缺!!