【发布时间】:2018-01-28 21:36:53
【问题描述】:
我正在使用 Swift 4 构建一个二维码阅读器,但遇到了一些问题,尤其是这些多行消息:
类型“AVMediaType”(又名“NSString”)没有成员“视频”
类型“AVMetadataObject.ObjectType”(又名“NSString”)没有成员“qr”
类型“AVLayerVideoGravity”(又名“NSString”)没有成员没有成员“resizeAspectFill”
但是,the sample project I've been following 使用与我相同的代码完美构建。
这是我的代码第一部分的示例:
import UIKit
import AVFoundation
@available(iOS 10.0, *)
class ScanViewController: UIViewController {
var captureSession = AVCaptureSession?.self
var videoPreviewLayer: AVCaptureVideoPreviewLayer?
@IBOutlet weak var previewView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Get the back-facing camera for capturing videos
//***ERROR OCCURRS ON THIS LINE***
let deviceDiscoverySession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInDualCamera], mediaType: AVMediaType.video, position: .back)
guard let captureDevice = deviceDiscoverySession.devices.first else {
print("Failed to get the camera device")
return
}
有谁知道是什么原因造成的以及如何解决?
【问题讨论】:
-
从您的代码中删除
@available(iOS 10.0, *)并更改您在 IB 和捕获设备中的部署目标AVCaptureDevice.default(for: .video) -
@LeoDabus 您是否建议用它替换以“let deviceDiscoverySession”开头的整行?
-
是的,只需获取默认相机。我也会选择一个更好的命名
do { guard let captureDevice = AVCaptureDevice.default(for: .video), case let input = try AVCaptureDeviceInput(device: captureDevice) else { return } // code ... } catch { print(error) return } -
看起来不错,但您能澄清一下“更改 IB 中的部署目标”是什么意思吗?留下完整的答案,以便我将其标记为正确!