有人可以解释为什么这段代码错了吗?

时间:2015-12-10 04:56:31

标签: ios swift2

var input = AVCaptureDeviceInput(device: backCamera)

我得到的错误消息说可以抛出,但它没有标记'try'并且没有处理错误。

我也有这行代码

if ((error == nil && captureSession?.canAddInput(input)) != nil)
  

可选类型'Bool'不能用作布尔值;测试“!= nil”而不是。

自动修正已打开但是对于第二行,当我单击修复它时只重写相同的代码行并添加另一行“!= nil”。

2 个答案:

答案 0 :(得分:2)

您收到的错误是

  

此调用可以抛出,但它没有标记为try,并且未处理错误。

因为您没有捕获可能抛出的异常。相反,你应该使用这个

var error: NSError?

do{
    let input = try AVCaptureDeviceInput(device: backCamera)
}
catch let myError as NSError{
    error = myError
}

第二个错误是因为captureSession?.canAddInput(input)返回可选的Bool值。要解决此问题,您应该使用(captureSession?.canAddInput(input) ?? false),这会有效地将nil值转换为false

if(error == nil && (captureSession?.canAddInput(input) ?? false))

更好的方法是将其全部放在do-catch语句中

do{
    let input = try AVCaptureDeviceInput(device: backCamera)

    if((captureSession?.canAddInput(input) ?? false)){
        //your code
    }
}
catch var error as NSError{
    //handle the NSError 'error'
}

答案 1 :(得分:0)

对于你的第一行,我相信你所要做的只是用

包围它
do{
   try //statement
}catch {

} 

对于第二个声明,我认为编译器抱怨的原因是因为你试图评估一个类型Bool是否为nil,试着简单地用

(error == nil && captureSession?.canAddInput(input))