2016-09-16 13 views
0

型の値を変換できません、私はちょうどスウィフト3プログラムに取り組んスウィフト2を更新し、私はエラーを取得しています、Swift 2からSwift 3: '(Data?、NSError?) - > Void'の型の値を期待される引数型 'GTMSessionFetcherCompletionHandler'に変換できません。

- 期待される引数の型「GTMSessionFetcherCompletionHandlerに「(データ?, NSError?)>ボイド」 ? '

let fetcher = GTMSessionFetcher(urlString:url) 
fetcher.authorizer = parentController.service.authorizer 
fetcher.beginFetch(completionHandler: handleDownload(studentNum)) 
             ^^^^ causing the error 

機能completionHandler用:

ここでは、関連する詳細(私は願って)であり、以下のように

func handleDownload(_ studentNum:Int) -> (Data?, NSError?) -> Void { 
    return { (data: Data?, error: NSError?) -> Void in 
     // code for function 
    } 
} 

GTMSessionFetcherCompletionHandlerは、Objective-Cのヘッダに定義されている。

#define GTM_NULLABLE_TYPE __nullable 
typedef void (^GTMSessionFetcherCompletionHandler)(NSData * GTM_NULLABLE_TYPE data, 
               NSError * GTM_NULLABLE_TYPE error); 

私は、 dleDownload()次へ:

func handleDownload(_ studentNum:Int) -> (GTMSessionFetcherCompletionHandler?) { 
    return { (data: Data?, error: NSError?) -> Void in 
     // code for function 
    } 
} 

が、それは、この関数までエラーを移動します「タイプのreturn式を変換できません '(?データ?, NSError) - >ボイド' タイプを返すために、 'GTMSessionFetcherCompletionHandler?' "

カレー(?)データとエラー変数を保持する方法を理解できず、コンパイルすることができません。

答えて

6

SE-0112によれば、NSErrorは今やErrorプロトコルとしてSwiftに橋渡しされている。あなた +はスウィフトでGTMSessionFetcherCompletionHandlerタイプをクリックすると、実際には、あなたはそれがブリッジます正確にどのように表示されます:

typealias GTMSessionFetcherCompletionHandler = (Data?, Error?) -> Void 

は、したがって、あなたは、単にこれを反映するために、あなたのhandleDownload(_:)の署名を変更する必要があります

func handleDownload(_ studentNum:Int) -> (Data?, Error?) -> Void { 
    return { (data: Data?, error: Error?) -> Void in 
     // code for function 
    } 
} 
+0

Ah - 参照してください。 Option +クリックトリックもいいですね! –

+0

私は追加する必要があります - これは私のコードの他の部分にも影響を与えました - NSErrorを使用するコードをいくつか強制し、実行時エラーが発生しました。私はあなたの応答なしでランタイムエラーを把握していないでしょう。ありがとう! –

+0

@ChrisGregg喜んでお答えください。 – Hamish

0
WORequestManager.shared().genericRequest(withMethod: "GET", webserviceName: walletAPI, andParameters: params, showLoading: true, success: { (responseDictionary: [AnyHashable: Any]?) in 


     }, failure: { (error: Error?) in 

    }) 
+0

このコードスニペットは質問に答えるかもしれませんが、方法や理由を説明するための文脈を提供しません。あなたの答えを説明する文を1つまたは2つ追加することを検討してください。 – brandonscript

関連する問題