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

Swift Initializer for conditional binding must have Optional type, not '[AVCaptureDevice]'

我的 swift 项目中有以下代码

if let availabeDevices = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInMicrophone,
.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices {

            captureDevice = availabeDevices.first
        }

当我 运行 这段代码时,它在 if 行上给我一个错误:

Initializer for conditional binding must have Optional type, not '[AVCaptureDevice]'

我尝试在 .devices 之后添加 ?,但出现了这个错误:

Cannot use optional chaining on non-optional value of type '[AVCaptureDevice]'

我该怎么办?

使用下面几行。

if let captureDevice = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInMicrophone, .builtInWideAngleCamera], 
mediaType: AVMediaType.video, 
position: .back).devices.first {
            self.captureDevice = captureDevice
        }

在此处解释您的错误:

你收到错误是因为 AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInMicrophone, .builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices returns [AVCaptureDevice] 不是 Optional 如果你想使用 if let 那么 RHS应该总是 Optional.

如果你想摆脱这个错误,你需要通过在它的末尾添加 as? [AVCaptureDevice] 来使 AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInMicrophone, .builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices 成为 Optional

您的代码将是:

if let availabeDevices = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInMicrophone,
                                                                            .builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices as? [AVCaptureDevice] {

    let captureDevice = availabeDevices.first
}