Swift   发布时间:2022-04-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了swift – 无法将Nil分配给AVCaptureDeviceInput类型大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试过注释掉deviceInput = nil这个行只是为了测试但是有其他错误.此@L_674_1@存在于其他在线示例中,因此我不确定这里发生了什么.

private func captureSetup (position : AVCaptureDevicePosition) {
    var captureError : NSError?
    var captureDevice : AVCaptureDevice!

    for testedDevice in AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo){
        if (testedDevice.position == position) {
            captureDevice = testedDevice as! AVCaptureDevice
        }
    }

    if (captureDevice == nil) {
        captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    }

    var deviceInput : AVCaptureDeviceInput
    do {
        deviceInput = try AVCaptureDeviceInput(device: captureDevicE)
    } catch let error as NSError {
        captureError = error
        deviceInput = nil  // Nil cAnnot be assigned to type AVCaptureDeviceInput
        if captureError != nil { // new if
            print("error: \(captureError?.localizedDescription)")
        }
    }
    captureSession.sessionPreset = AVCaptureSessionPresetHigh

    if (captureError == nil) {
        if (captureSession.canAddInput(deviceInput)) {
            captureSession.addInput(deviceInput)
        }

        self.videoDataOutput = AVCaptureVideoDataOutput()
        self.videoDataOutput!.videoSetTings = [kCVPixelBufferPixelFormatTypeKey: Int(kCVPixelFormatType_32BGRA)]
        self.videoDataOutput!.alwaysDiscardsLateVideoFrames = true
        self.videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue",DISPATCH_QUEUE_seriaL)
        self.videoDataOutput!.setSampleBufferDelegate(self,queue: self.videoDataOutputQueue!)

        if (captureSession.canAddOutput(self.videoDataOutput)) {
            captureSession.addOutput(self.videoDataOutput)
        }
    }

    visageCameraView.frame = UIScreen.mainScreen().bounds

    let previewLayer: AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession) as AVCaptureVideoPreviewLayer // changed to let
    previewLayer.frame = UIScreen.mainScreen().bounds
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    visageCameraView.layer.addSublayer(previewLayer)
}

解决方法

这对我来说很有意义.如果你想把它设置为零.使用选项.这样你就可以把它设置为零.这是一个很好的机制来避免崩溃和大量的if语句进行空检查.我推荐的(即使是测试)是使用选项.这就是你的样子:

var deviceInput : AVCaptureDeviceInput?

现在,deviceInput不必保存任何有效值.所以你可以写下面的内容(认为nil)

deviceInput = nil

现在,假设您想在其他地方使用它.你可以使用如果像这样:

if let myNonNilValue = deviceInput {
    // myNonNilValue is for sure not nil
}

大佬总结

以上是大佬教程为你收集整理的swift – 无法将Nil分配给AVCaptureDeviceInput类型全部内容,希望文章能够帮你解决swift – 无法将Nil分配给AVCaptureDeviceInput类型所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。