没有打印错误,但是函数没有 运行

No error printed however function doesn't run

我正在尝试显示相机视图,正如您在下面的代码中看到的那样,我将其设置为显示任何错误并且在出现任何错误时不会中断程序,但是当我这样做时 运行 此代码没有错误发生或显示相机视图。我运行在实际的 phone 上安装它,phone 确实请求它是否有权使用相机。下面是代码

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    captureSession = AVCaptureSession()
    captureSession?.sessionPreset = AVCaptureSessionPreset1920x1080

    let backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
    var input : AVCaptureDeviceInput?
    let error : NSError?
    do {
        input = try AVCaptureDeviceInput(device: backCamera)
    } catch let error as NSError? {
        print(error)



        if error == nil && (captureSession?.canAddInput(input))!{
            captureSession?.addInput(input)

            videoOutput = AVCaptureVideoDataOutput()
            //videoOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecKey]

                if ((captureSession?.canAddOutput(videoOutput)) != nil){
                    captureSession?.addOutput(videoOutput)

                    previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
                    previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
                    previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.Portrait
                    cameraView.layer.addSublayer(previewLayer!)
                    captureSession?.startRunning()
            }
        }
    }

}

不要将代码放在 catch 中。那就是万一出了问题。

do {
    input = try AVCaptureDeviceInput(device: backCamera)
} catch let error as NSError? {
    print(error)
    return//Stop rest of code
}
if (captureSession?.canAddInput(input))!{
        captureSession?.addInput(input)

        videoOutput = AVCaptureVideoDataOutput()
        //videoOutput?.outputSettings = [AVVideoCodecKey : AVVideoCodecKey]

            if ((captureSession?.canAddOutput(videoOutput)) != nil){
                captureSession?.addOutput(videoOutput)

                previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
                previewLayer?.videoGravity = AVLayerVideoGravityResizeAspect
                previewLayer?.connection.videoOrientation = AVCaptureVideoOrientation.Portrait
                cameraView.layer.addSublayer(previewLayer!)
                captureSession?.startRunning()
        }
    }

只有在发生错误时才会执行catch 的主体。因此,由于您的代码位于 catch 块内,因此它不会执行,因为它没有发现任何错误。 因此,按照@penatheboss 的建议,从 catch 块中删除代码并将其放在外面。