当我尝试启动前置摄像头时出现错误(Swift)

时间:2015-03-21 20:04:33

标签: ios iphone xcode swift

当我尝试使用以下代码时出现错误:

   captureSession = AVCaptureSession()
    captureSession!.sessionPreset = AVCaptureSessionPresetPhoto

    //var backCamera = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)

    let videoDevices = AVCaptureDevice.devicesWithMediaType(AVMediaTypeVideo)
    var captureDevice:AVCaptureDevice

    for device in videoDevices{
        let device = device as AVCaptureDevice
        if device.position == AVCaptureDevicePosition.Front {
            captureDevice = device
            break
        }
    }


    var error: NSError?
    var input = AVCaptureDeviceInput(device: captureDevice, error: &error)

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

        stillImageOutput = AVCaptureStillImageOutput()
        stillImageOutput!.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
        if captureSession!.canAddOutput(stillImageOutput) {
            captureSession!.addOutput(stillImageOutput)

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

            captureSession!.startRunning()
        }
    }

行:var input = AVCaptureDeviceInput(device: captureDevice, error: &error)给出了错误:在初始化之前使用的变量CaptureDevice 。有人可以帮我解决这个问题吗?

非常感谢你!

1 个答案:

答案 0 :(得分:1)

这是因为captureDevice可能在初始化之前使用:

var captureDevice:AVCaptureDevice

for device in videoDevices{
    let device = device as AVCaptureDevice
    if device.position == AVCaptureDevicePosition.Front {
        captureDevice = device
        break
    }
}

如果循环找不到前置摄像头,则在初始化之前将使用captureDevice。要解决此问题,请将captureDevice声明为隐式解包的可选项,并将其初始化为nil

var captureDevice:AVCaptureDevice! = nil