条件绑定的初始化程序必须具有可选类型,而不是“[AVCaptureDevice]”
Initializer for conditional binding must have Optional type, not '[AVCaptureDevice]'
我正在努力为我的应用提供相机功能。我正在学习教程(AppCoda:https://www.appcoda.com/avfoundation-swift-guide/)。我看过其他 S.O。回答并了解到语句的右侧(下面)必须是可选的才能解决错误。我如何将其设为可选并修复错误?
可选的允许你在变量中有一个 nil。然后编译器会强制你在使用变量之前检查是否有值。但是,如果您没有可选的,那对您来说是一件好事 - 您不必检查值,因为它确保始终会有一个。
因此,在您的情况下,您不希望那里有一个可选项,请按如下方式重写您的代码:
let cameras = session.devices.flatMap { [=10=] }
guard !cameras.isEmpty else { throw CameraControllerError.noCamerasAvailable }
因为显然调用 session.devices.flatMap { [=11=] }
return 一个数组 [AVCaptureDevice]
,而不是一个可选数组 [AVCaptureDevice]?
。因此编译器可以保证相机总是有一个数组值,而不是零。因此你可以只防止空数组,这意味着没有相机(因为相机列表是空的)。
我正在努力为我的应用提供相机功能。我正在学习教程(AppCoda:https://www.appcoda.com/avfoundation-swift-guide/)。我看过其他 S.O。回答并了解到语句的右侧(下面)必须是可选的才能解决错误。我如何将其设为可选并修复错误?
可选的允许你在变量中有一个 nil。然后编译器会强制你在使用变量之前检查是否有值。但是,如果您没有可选的,那对您来说是一件好事 - 您不必检查值,因为它确保始终会有一个。
因此,在您的情况下,您不希望那里有一个可选项,请按如下方式重写您的代码:
let cameras = session.devices.flatMap { [=10=] }
guard !cameras.isEmpty else { throw CameraControllerError.noCamerasAvailable }
因为显然调用 session.devices.flatMap { [=11=] }
return 一个数组 [AVCaptureDevice]
,而不是一个可选数组 [AVCaptureDevice]?
。因此编译器可以保证相机总是有一个数组值,而不是零。因此你可以只防止空数组,这意味着没有相机(因为相机列表是空的)。