条件绑定的初始化程序必须具有可选类型,而不是“[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]?。因此编译器可以保证相机总是有一个数组值,而不是零。因此你可以只防止空数组,这意味着没有相机(因为相机列表是空的)。