首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在打开可选值时意外地发现为零?Swift4

在打开可选值时意外地发现为零?Swift4
EN

Stack Overflow用户
提问于 2018-08-10 07:37:45
回答 3查看 946关注 0票数 1

我已经寻找了Here的解决方案,并尝试了几个,没有一个有效。也许这个问题可以帮助一些没有从我提供的链接中得到解决方案的人。

我试图设置一个相机,然而,我得到了以下当我运行的应用程序。

意外地在展开可选值时发现为零。

这发生在下面所示的行中:

代码语言:javascript
复制
        func setupInputOutput() {
//        if currentCamera != nil {
            do {
                let captureDeviceInput = try AVCaptureDeviceInput(device: currentCamera!) //Here error happens
                captureSession.addInput(captureDeviceInput)
                photoOutput?.setPreparedPhotoSettingsArray([AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.jpeg])], completionHandler: nil)
            } catch {
                print("error -- \(error)")
            }
//        }
    }

我声明currentCamera如下所示:

代码语言:javascript
复制
    var currentCamera: AVCaptureDevice?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-10 07:45:24

在初始化AVCaptureDeviceInput之前,获取默认AVCaptureDevice并将其设置为currentCamera属性,如下所示

代码语言:javascript
复制
guard let device: AVCaptureDevice = AVCaptureDevice.default(.builtInWideAngleCamera,
    for: .video, position: .back) else {
    return
}
self.currentCamera = device
票数 3
EN

Stack Overflow用户

发布于 2018-08-10 07:52:07

您正在遭受崩溃,因为您是强制展开currentCamera!当它可能是零,此时,您的评论行,您不确定它是否为零。

首先,您应该确保在到达此点之前已经初始化了您的AVCaptureDevice,方法是

代码语言:javascript
复制
currentCamera = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back)

一般来说,您不应该使用== 0和!= nil。这正是选拔赛的初衷,斯威夫特也有自己的应对方式。

代码语言:javascript
复制
    func setupInputOutput() {
        if let currentCamera = currentCamera {
            do {
                let captureDeviceInput = try AVCaptureDeviceInput(device: currentCamera!) //Here error happens
                captureSession.addInput(captureDeviceInput)photoOutput?.setPreparedPhotoSettingsArray([AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.jpeg])], completionHandler: nil)
            } catch {
                print("error -- \(error)")
            }
        }
    }

如果您不熟悉选项和展开,应该查看有关它的苹果文档,如下所示:https://developer.apple.com/documentation/swift/optional

票数 1
EN

Stack Overflow用户

发布于 2018-08-10 08:06:11

代码语言:javascript
复制
var currentCamera: AVCaptureDevice?

当你使用AVCaptureDevice??意味着它是一个可选的变量。currentCamera可以是AVCaptureDevice,也可以是nil

处理选拔赛的3种方法:

代码语言:javascript
复制
// Using Guard
guard let currentCam = currentCamera else {return}
// do stuff using currentCam

// Using if
if let currentCam = currentCamera {
   // do stuff using currentCam
}

// Ugliest
if currentCamera != nil {
   // do stuff using currentCam
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51781396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档