簡體   English   中英

無法使用類型為((NSURL,*:NSString?)'的參數列表調用'*'

[英]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)的調用中, sourceApplicationNSString ,即非可選的。

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM