条件绑定的初始化程序必须具有可选类型,而不是' [AVCaptureDevice]'

时间:2017-12-27 13:59:20

标签: ios avfoundation swift4

我正致力于提供我的应用相机功能。我正在学习一个教程(AppCoda:https://www.appcoda.com/avfoundation-swift-guide/)。我看过其他的S.O.回答并了解到声明的右侧(下面)必须是可选的,以便解决错误。如何将其设为可选项并修复错误?

enter image description here

1 个答案:

答案 0 :(得分:1)

可选允许您在变量中使用nil。然后编译器会强制您在使用变量之前检查是否存在值。但是,如果您没有可选项,那对您来说是件好事 - 您不必检查价值,因为确保始终存在价值。

因此,在您的情况下,您不想在那里选择一个可选项,请按如下方式重写您的代码:

let cameras = session.devices.flatMap { $0 }
guard !cameras.isEmpty else { throw CameraControllerError.noCamerasAvailable }

因为很明显,调用session.devices.flatMap { $0 }会返回一个数组[AVCaptureDevice],而不是一个可选的数组[AVCaptureDevice]?。因此,编译器可以保证摄像机始终具有数组值,而不是零。因此,您可以防止空数组,这意味着没有相机(因为相机列表是空的)。