swift – 无法将Nil分配给AVCaptureDeviceInput类型
发布时间:2020-12-14 04:49:11 所属栏目:百科 来源:网络整理
导读:我试过注释掉deviceInput = nil这个行只是为了测试但是有其他错误.此代码存在于其他在线示例中,因此我不确定这里发生了什么. private func captureSetup (position : AVCaptureDevicePosition) { var captureError : NSError? var captureDevice : AVCapture
我试过注释掉deviceInput = nil这个行只是为了测试但是有其他错误.此代码存在于其他在线示例中,因此我不确定这里发生了什么.
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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |