gpt4 book ai didi

swift - 在 do block 中包围 AVCaptureDeviceInput

转载 作者:行者123 更新时间:2023-11-28 15:55:28 24 4
gpt4 key购买 nike

我目前正在学习一个教程,该教程展示了如何使用 AVFoundation 框架来创建自定义相机 View 。

在尝试实例化 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
}

我遇到的错误是:

Argument type 'NSError' does not conform to expected tpye '_ErrorCodeProtocol'

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

catch error as! NSError 

这修复了编译错误,但是通过这样做我不会重新分配错误变量,从而使 if 检查毫无意义吗?

我是 Swift 编程语言的新手,因此非常感谢任何帮助。

提前致谢。

最佳答案

在 Swift 中,使用 do-try-catch 时通常不需要声明 error 变量。您可以使用类似 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`

当您省略 catch 子句的某些部分时,Swift 会自动假定 let error 为 Error,因此将此行写为 } catch let error { 或者只是 } catch { 是等价的。

关于swift - 在 do block 中包围 AVCaptureDeviceInput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41815494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com