条件绑定的Swift初始值设定项必须具有可选类型,而不是';[AVCaptureDevice]';
我的swift项目中有以下代码条件绑定的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
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
}