2016-10-05 2 views
4

は、次のエラーが表示されます。..'() - > Void'の値を '(() - > Void)に割り当てることはできません!'私はスウィフト3を使用しているので

Cannot assign value of type '(LLSimpleCamera?, NSError?) -> Void' to type '((LLSimpleCamera?, Error?) -> Void)!'

誰が何をすべきか知っていますか?ここ が私のコード..です

camera.onError = { (camera: LLSimpleCamera?, error: NSError?) -> Void in 
     print("Camera error: \(error)") 

     if error.domain == LLSimpleCameraErrorDomain { 
      if error.code == Int(LLSimpleCameraErrorCodeCameraPermission.rawValue) || error.code == Int(LLSimpleCameraErrorCodeMicrophonePermission.rawValue) { 

       let alertVC = UIAlertController(title: "Ooops!", message: "We need permission for the camera. Please go to your settings.", preferredStyle: .alert) 
       let okAction = UIAlertAction(title: "OK", style: .default, handler: nil) 
       let settingsAction = UIAlertAction(title: "Settings", style: .default) { (action) in 
        UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!) 
       } 

       alertVC.addAction(okAction) 
       alertVC.addAction(settingsAction) 

       self.present(alertVC, animated: true, completion: nil) 
      } 
     } 
    } 
+0

「camera.onError = {(カメラ:LLSimpleCamera ?,エラー:エラー?)」で「camera.onError = {(カメラ:LLSimpleCamera?、エラー:NSError? Void in ... '? – user28434

+0

はい、あなたは正しいです!しかし、Xcodeは、エラーにはドメインとコードのタイプがないと言っています。これを修正する方法は分かりますか? –

+0

まあ、私はあなたの 'NSError'に 'as?'を使ってエラーをキャストしなければならないと思います。 Swift 3の前にはプロトコル 'ErrorType'と古いObjective Cクラス' NSError'がありましたが、Swiftでは単純化の命名方法として、現在は 'Error'(ドメインやその他のプロパティはありません)と呼ばれています。 ObjCのNSErrorがマップされます。 – user28434

答えて

1

Swift 3は、プロトコルErrorSwift 2ErrorType別名)にObjective CのNSErrorタイプをマップします。

したがって、クロージャパラメータリストでは、NSErrorではなく、第2パラメータの型としてErrorが必要です。

しかし、クロージャの内部で、あなたは.domain/.codeの/ etcを使用したい場合はNSErrorにケースにerrorパラメータを入力する必要があります。

関連する問題