2015-09-07 61 views
3

用下面的代码我得到这个错误:功能错误处理

Cannot convert value of type 'inout NSError?' (aka 'inout Optional') to expected argument type '()'

和它在这行代码:

if device.lockForConfiguration(&error) 

下面的代码的其余部分:

func focusWithMode(focusMode:AVCaptureFocusMode, exposureMode:AVCaptureExposureMode, point:CGPoint, monitorSubjectAreaChange:Bool){ 

    dispatch_async(self.sessionQueue!, { 
     var device: AVCaptureDevice! = self.videoDeviceInput!.device 
     var error: NSError? = nil 

     if device.lockForConfiguration(&error){ 
      if device.focusPointOfInterestSupported && device.isFocusModeSupported(focusMode){ 
       device.focusMode = focusMode 
       device.focusPointOfInterest = point 
      } 
      if device.exposurePointOfInterestSupported && device.isExposureModeSupported(exposureMode){ 
       device.exposurePointOfInterest = point 
       device.exposureMode = exposureMode 
      } 
      device.subjectAreaChangeMonitoringEnabled = monitorSubjectAreaChange 
      device.unlockForConfiguration() 
     } 

    }) 

} 
+2

我的猜测是斯威夫特2和try/catch VS错误,但OP正在忸怩作态来考验我们。 – zaph

+0

@jtbandes这是错误:无法转换'inout NSError'类型的值? (aka'inout可选')与预期参数类型'()' –

+2

不要告诉我 - 告诉所有人。 [编辑]你的问题,并输入所需的信息。见[问]。 – jtbandes

回答

1

InSwift 2错误处理已从NSError输入输出参数更改为try/catch(不是例外)。

我觉得这是从NSError正确转换的try/catch:

func focusWithMode(focusMode:AVCaptureFocusMode, exposureMode:AVCaptureExposureMode, point:CGPoint, monitorSubjectAreaChange:Bool){ 
    dispatch_async(self.sessionQueue!, { 
     var device: AVCaptureDevice! = self.videoDeviceInput!.device 
     var error: NSError? = nil 

     do { 
      try device.lockForConfiguration() 
      if device.focusPointOfInterestSupported && device.isFocusModeSupported(focusMode){ 
       device.focusMode = focusMode 
       device.focusPointOfInterest = point 
      } 
      if device.exposurePointOfInterestSupported && device.isExposureModeSupported(exposureMode){ 
       device.exposurePointOfInterest = point 
       device.exposureMode = exposureMode 
      } 
      device.subjectAreaChangeMonitoringEnabled = monitorSubjectAreaChange 
      device.unlockForConfiguration() 
     } 
     catch { 
      print("Locked error!") 
     } 
    }) 
} 
+0

这真是太好了,谢谢!现在唯一的问题是,它给了我一个错误“预期模式”在线'let try locked = device.lockForConfiguration()' –

+0

好吧,我想出来了,上面的答案非常接近。删除'let try locked ='并用'try'替换。删除'如果锁定',它是相应的花括号。而已! –

+0

@Wheeler Preddy更新回答问题。 – zaph