我刚刚将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)的调用中,sourceApplicationNSString,即非可选。

您需要使用sourceApplication解包输入的if-let值,或者使用??FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication ?? "defaultAppName")对其进行默认设置,或者如果您控制application func的声明甚至更好,请首先将其设置为非可选。

关于ios - 无法使用类型为((NSURL,*:NSString?))的参数列表调用'*',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29975500/

10-09 02:32