我目前正在学习如何使用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编程语言比较新,所以任何帮助都会非常感激。
提前致谢。
答案 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}}是等效的。