![](/img/trans.png)
[英]Cannot invoke initializer for type 'NSURL' with an argument list of type '(fileURLWithPath: NSURL)'
[英]Cannot invoke '*' with an argument list of type '(NSURL, *: NSString?)'
我刚刚将Xcode更新为6.3.1,问题是我的Facebook集成突然产生奇怪的错误。 在此之前(Swift 1.1和Xcode 6.2)根本没有问题。
错误信息1
/Users/MNurdin/Documents/iOS/xxxxx/AppDelegate.swift:33:41:无法使用类型为((NSURL,sourceApplication:NSString?)'的参数列表调用'handleOpenURL'
错误信息2
/Users/MNurdin/Documents/iOS/xxxxx/AppDelegate.swift:32:10:由方法'application( :openURL:sourceApplication:annotation :)提供的Objective-C方法'application:openURL:sourceApplication:annotation:' 与协议'UIApplicationDelegate'中的可选需求方法'application( :openURL:sourceApplication:annotation :)'
我的密码
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
,即非可选的。
您需要使用if-let
或使用默认值??
来包装输入的sourceApplication
值。 即FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication ?? "defaultAppName")
,或者如果您控制application
FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication ?? "defaultAppName")
的声明,甚至更好,那么它首先不是可选的。
谢谢@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
}
它完美地工作!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.