私はHealthKit対応アプリで前のバージョンのSwiftを使用して完了ハンドラを持っています。それは私にSwift 4.0の補完ハンドラの新バージョンに関する問題を与えている。私のコードは次のようになりタイプ '(成功:Bool、エラー:NSError?)の引数リストを使用して' completion 'を呼び出せません。
Cannot invoke 'completion' with an argument list of type '(success: Bool, error: NSError?)'
:
エラーを取得
healthKitStore.requestAuthorization(toShare: nil, read: healthKitTypesToRead) { (success, error) -> Void in
if(completion != nil) {
completion(success:success,error:error! as! NSError)
}
}
これはどのように新しい完了ハンドラになりますか?私の頭の中でこれを包み込むのに苦労します。
メソッドシグニチャーを使用する必要があります。なぜあなたは完了ハンドラをオプションとして宣言していますか?なぜあなたはNSErrorとしてエラーを投げかけますか?そのままエラーを返します(キャストやアンラッピングは不要です)。 'completion(success、error)'を返し、nilに対して補完をチェックしない –