可选类型 'AVCaptureDevice?' 的值必须解开包装为类型 'AVCaptureDevice' 的值

  • 本文关键字:类型 AVCaptureDevice 包装 的值 swift
  • 更新时间 :
  • 英文 :


我正在学习如何从ipad相机捕获条形码扫描仪的教程,这就是编写的代码。本教程是用xcode 8编写的,我使用的是xcode 10。我收到一个错误,

"可选类型‘AVCaptureDevice?’的值必须展开到类型为"AVCaptureDevice"的值

do try-catch语句中的

。有人能告诉我在这种情况下处理可选值的正确方法吗?当我将行更改为"let input=try AVCaptureDeviceInput(device:captureDevice!("应用程序崩溃。

import AVFoundation
import UIKit
class ScannerViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate {
var video = AVCaptureVideoPreviewLayer()    //contains what the camera is pointing at
override func viewDidLoad() {
super.viewDidLoad()
//creates session
let session = AVCaptureSession()
//define capture device
let captureDevice = AVCaptureDevice.default(for: AVMediaType.video)
do{
let input = try AVCaptureDeviceInput(device: captureDevice)//Error occurs here
session.addInput(input) //input coming from camera
}
catch{
print("Error")
}
let output = AVCaptureMetadataOutput()
session.addOutput(output)
output.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
output.metadataObjectTypes = [AVMetadataObject.ObjectType.code93, AVMetadataObject.ObjectType.code39]   //may need to change this based on barcode type
video = AVCaptureVideoPreviewLayer(session: session)
video.frame = view.layer.bounds
view.layer.addSublayer(video)
session.startRunning()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}

当我搜索这个问题的答案时,它首先只显示了您的问题。然后我向我的同事寻求帮助,最后它运行得没有任何错误。请尝试以下代码。

let captureDevice = AVCaptureDevice.default(for: .video)
do{
let input = try AVCaptureDeviceInput(device: captureDevice!)
if self.session.canAddInput(input) {
self.captureSession.addInput(input)
}
}
catch{
print("Error")
}

最新更新