![](/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.