简体   繁体   English

用于条件绑定的 Swift Initializer 必须具有 Optional 类型,而不是“[AVCaptureDevice]”

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

I have this following code in my swift project我的 swift 项目中有以下代码

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

            captureDevice = availabeDevices.first
        }

When i run this code it gives me an error on if line that reads:当我运行此代码时,它在 if 行上给我一个错误:

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

I tried adding ?我尝试添加? after .devices ,but that gave this error:.devices之后,但这给出了这个错误:

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

What do i do?我该怎么办?

Use below lines.使用以下几行。

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

Explaining your error here:在此处解释您的错误:

You are getting error because AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInMicrophone, .builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices returns [AVCaptureDevice] which is not Optional and if you want to use if let then RHS should be always Optional .您收到错误是因为AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInMicrophone, .builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices返回[AVCaptureDevice]这不是Optional ,如果您想使用if let then RHS应该总是Optional

if you want to get rid of this error you need to make AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInMicrophone, .builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices as Optional by adding as? [AVCaptureDevice]如果你想摆脱这个错误,你需要将AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInMicrophone, .builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices添加as? [AVCaptureDevice] Optional as? [AVCaptureDevice] at the end of it. as? [AVCaptureDevice]在它的末尾。

And your code will be:你的代码将是:

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

    let captureDevice = availabeDevices.first
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Swift错误:条件绑定的初始化程序必须具有可选类型,而不是&#39;()&#39; - Swift error: Initializer for conditional binding must have Optional type, not '()' 条件绑定的初始化程序必须具有可选类型,而不是“字符串”-iOS-Swift - Initializer for conditional binding must have Optional type, not 'String' - ios - swift 条件绑定的初始化程序必须具有Optional类型,而不是&#39;IndexPath&#39;-Xcode 8,Swift 3 - Initializer for conditional binding must have Optional type, not 'IndexPath' - Xcode 8, Swift 3 Swift - 条件绑定的初始化程序必须具有可选类型,而不是 'PHFetchResult<phasset> '</phasset> - Swift - Initializer for conditional binding must have Optional type, not 'PHFetchResult<PHAsset>' iOS Swift:用于条件绑定的初始化程序必须具有可选类型,而不是&#39;()-&gt; String? - iOS Swift: Initializer for conditional binding must have Optional type, not '() -> String? 条件绑定的初始化程序必须具有 Optional 类型,而不是 Swift 5 中的 CustomClass - Initializer for conditional binding must have Optional type, not CustomClass in Swift 5 条件绑定的初始化程序必须具有 Optional 类型,而不是 Swift 中的“NSNumber” - Initializer for conditional binding must have Optional type, not 'NSNumber' in Swift “用于条件绑定的初始化程序必须具有可选类型,而不是&#39;[Any]&#39;”-Swift - “Initializer for conditional binding must have Optional type, not '[Any]'” - Swift 条件绑定的初始化程序必须具有可选类型 - Initializer for conditional binding must have optional type 条件绑定的初始化程序必须具有可选类型 - initializer for conditional binding must have optional type
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM