Я следовал учебному пособию о том, как захватить сканер штрих-кода с камеры 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()
}
}