在do块中包围AVCaptureDeviceInput

时间:2017-01-23 20:56:43

标签: swift avfoundation

我目前正在学习如何使用AVFoundation框架创建自定义相机视图的教程。

在尝试实例化AVCaptureDeviceInput的实例时,我有点困惑。

我有以下内容:

var error: NSError?

        do  {
            let input = try AVCaptureDeviceInput(device: backCamera) as AVCaptureDeviceInput
            if error == nil && captureSession!.canAddInput(input) {
                captureSession!.addInput(input)
            }
        } catch error {
            // Handle errors
        } catch {
            // Catch other errors
        }

我面临的错误是:

  

参数类型' NSError'不符合预期的tpye' _ErrorCodeProtocol'

为了解决这个问题,我在catch中添加了以下内容:

catch error as! NSError 

这修复了编译错误,但这样做不会重新分配错误变量,因此会使if检查毫无意义吗?

我对Swift编程语言比较新,所以任何帮助都会非常感激。

提前致谢。

1 个答案:

答案 0 :(得分:1)

在Swift中,使用error时通常无需声明do-try-catch个变量。您可以使用catch类似的语法case-let错误//### Usually, no need to declare `error`. do { let input = try AVCaptureDeviceInput(device: backCamera) as AVCaptureDeviceInput //### When error occures, the rest of the code in do-catch will not be executed, you have no need to check `error`. if captureSession!.canAddInput(input) { captureSession!.addInput(input) } } catch let error as Error { // Handle all errors print(error) //... } //### The `catch` above catches all errors, no need to put another `catch`

let error as Error

当您忽略catch子句的某些部分时,Swift会自动采用} catch let error {,因此将该行写为} catch {或仅{{1}}是等效的。