黄色警告:从“ AVCaptureVideoPreviewLayer”到“ AVCaptureVideoPreviewLayer”的条件转换始终成功

时间:2018-09-01 17:06:21

标签: swift xcode camera

我有这段代码,并发出黄色警告。我不知道如何编码,因此黄色警告消失了。从Swift-2-> 3-> 4转换后尝试清理代码。

if let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) as? AVCaptureVideoPreviewLayer {
    previewLayer.bounds = imageView.bounds
    previewLayer.position = CGPoint(x: 140, y: 140)
    previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
    imageView.layer.addSublayer(previewLayer)
    view.addSubview(imageView)    
}

删除as? AVCaptureVideoPreviewLayer会显示错误:

  

用于条件绑定的初始化程序必须具有可选类型,而不是“ AVCaptureVideoPreviewLayer”

1 个答案:

答案 0 :(得分:1)

AVCaptureVideoPreviewLayer(session: captureSession)总是返回类型AVCaptureVideoPreviewLayer的对象,而不是类型AVCaptureVideoPreviewLayer?的对象(即返回的对象不是可选的,因此不能为nil)。

当您执行if let时,Swift需要一个Optional类型。由于未创建任何可选类型,因此会发生错误。

我的建议是删除if部分,只保留

let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.bounds = imageView.bounds
previewLayer.position = CGPoint(x: 140, y: 140)
previewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
imageView.layer.addSublayer(previewLayer)
view.addSubview(imageView) 

希望这会有所帮助!