条件绑定的Swift初始值设定项必须具有可选类型,而不是';[AVCaptureDevice]';

条件绑定的Swift初始值设定项必须具有可选类型,而不是';[AVCaptureDevice]';,swift,optional-binding,Swift,Optional Binding,我的swift项目中有以下代码 if let availabeDevices = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInMicrophone, .builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices { captureDevice = availabeDevices.first

我的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(设备类型:[.builtInMicrophone,.builtInWideAngleCamera],媒体类型:AVMediaType.video,位置:.back)。设备
返回
[AVCaptureDevice]
它不是
可选的
如果您想使用
if let
那么
RHS
应该始终是
可选的

如果要消除此错误,需要通过添加
as将设备设置为
AVCaptureDevice.DiscoverySession(设备类型:[.builtInMicrophone.builtInWideAngleCamera],mediaType:AVMediaType.video,position:.back)。设备作为
可选
?[AVCaptureDevice]
在它的末尾

您的代码将是:

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

    let captureDevice = availabeDevices.first
}