ios - 条件绑定的初始化程序必须具有可选类型:不是“[AVCaptureDevice]”
问题描述
按照 repo 和教程:https ://github.com/brianadvent/CustomCamera
我收到以下代码错误:错误:
Initializer for conditional binding must have Optional type, not 'AVCaptureVideoPreviewLayer'
if let availableDevices = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices {
captureDevice = availableDevices.first
beginSession()
}
同样,对于以下部分
if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) {
self.previewLayer = previewLayer
self.view.layer.addSublayer(self.previewLayer)
self.previewLayer.frame = self.view.layer.frame
captureSession.startRunning()
let dataOutput = AVCaptureVideoDataOutput()
dataOutput.videoSettings = [(kCVPixelBufferPixelFormatTypeKey as NSString):NSNumber(value:kCVPixelFormatType_32BGRA)] as [String : Any]
dataOutput.alwaysDiscardsLateVideoFrames = true
if captureSession.canAddOutput(dataOutput) {
captureSession.addOutput(dataOutput)
}
captureSession.commitConfiguration()
let queue = DispatchQueue(label: "com.brianadvent.captureQueue")
dataOutput.setSampleBufferDelegate(self, queue: queue)
}
与第二个代码片段相关的错误:条件绑定的初始化程序必须具有可选类型,而不是“AVCaptureVideoPreviewLayer”
解决方案
进行以下更改。
if let availableDevice = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .back).devices.first {
captureDevice = availableDevice
beginSession()
}
希望你明白这一点。
devices(an array) 不是可选的,也就是说,你肯定会得到这个数组。但是,devices.first
是可选的,因为数组可能为空。
推荐阅读
- spring - Spring-boot 应用程序在 IDEA 中工作,但在运行 jar 时崩溃 - “无法解析持久性单元”
- sql-server - 在将表导出/导入到另一个数据库 SQL Server 时修改表行
- java - Appium测试无法通过终端运行(使用的编程语言是Java)
- reactjs - 我如何在本机反应中实现以下设计
- php - 将 foreach ID 插入其他表
- javascript - 我如何在区域样条类别高图中显示从当前日期起一周的最后 7 天
- java - 如何修复“不兼容的类型:org.apache.beam.sdk.options.ValueProvider
无法转换为 java.lang.String" - ruby-on-rails - 使用 Froala 所见即所得编辑器上传图像并将其保存到 Ruby on Rails 中的 ActiveStorage
- cmake - CMake 服务器:文档不匹配,需要澄清
- flutter - Flutter:setState() 函数未正确更新值