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
}
我的 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
}