【问题标题】:Initializer for conditional binding must have Optional type: not '[AVCaptureDevice]' [duplicate]条件绑定的初始化程序必须具有可选类型:不是“[AVCaptureDevice]”[重复]
【发布时间】:2019-11-28 00:05:51
【问题描述】:

按照 repo 和教程:https://github.com/brianadvent/CustomCamera

我收到以下代码错误: 错误:

Initializer for conditional binding must have Optional type, not 'AVCaptureVideoPreviewLayer'
      if let availableDevices = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices {
            captureDevice = availableDevices.first
            beginSession()
        }

类似的,下面的片段

if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) {
            self.previewLayer = previewLayer
            self.view.layer.addSublayer(self.previewLayer)
            self.previewLayer.frame = self.view.layer.frame
            captureSession.startRunning()

            let dataOutput = AVCaptureVideoDataOutput()
            dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString):NSNumber(value:kCVPixelFormatType_32BGRA)] as [String : Any]

            dataOutput.alwaysDiscardsLateVideoFrames = true

            if captureSession.canAddOutput(dataOutput) {
                captureSession.addOutput(dataOutput)
            }

            captureSession.commitConfiguration()


            let queue = DispatchQueue(label: "com.brianadvent.captureQueue")
            dataOutput.setSampleBufferDelegate(self, queue: queue)



        }

与第二个代码 sn-p 相关的错误: 条件绑定的初始化程序必须具有 Optional 类型,而不是 'AVCaptureVideoPreviewLayer'

【问题讨论】:

  • 您正试图解开一些不是可选的东西。就是不要解包,直接赋值给变量

标签: ios swift iphone


【解决方案1】:

进行以下更改。

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

希望你明白这一点。

devices(an array) 不是可选的,也就是说,你肯定会得到这个数组。但是,devices.first 是可选的,因为数组可能为空。

【讨论】:

    【解决方案2】:

    你试图解开一些不是可选的东西。只是不要打开它,而是直接将它分配给一个变量,就像你对 dataOutput 所做的那样。

    【讨论】:

      猜你喜欢
      • 2017-06-28
      • 2019-03-11
      • 2017-01-22
      • 2018-03-25
      • 2016-01-08
      • 2017-04-08
      • 2016-09-23
      • 1970-01-01
      相关资源
      最近更新 更多