Ios 条件绑定的初始值设定项必须具有可选类型:not';[AVCaptureDevice]';

Ios 条件绑定的初始值设定项必须具有可选类型:not';[AVCaptureDevice]';,ios,swift,iphone,Ios,Swift,Iphone,遵循回购协议和指南: 我收到以下代码错误: 错误: 类似地,以下部分 if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) { self.previewLayer = previewLayer self.view.layer.addSublayer(self.previewLayer) self.previewLayer.frame

遵循回购协议和指南:

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

类似地,以下部分

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)



        }
与第二个代码段关联的错误: 条件绑定的初始值设定项必须具有可选类型,而不是“AVCaptureVideoPreviewLayer”

进行以下更改

if let availableDevice = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices.first {
        captureDevice = availableDevice
        beginSession()
    }
希望你明白我的意思


设备(数组)不是可选的,也就是说,您肯定会得到数组。但是,
设备。首先
是可选的,因为数组可能是空的。

您正在尝试展开非可选的内容。只是不要将其展开,而是直接将其分配给变量,就像您对
dataOutput

所做的那样,您正在尝试展开非可选的内容。只是不要打开它,直接将其分配给变量
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)



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