2017-12-27 306 views

回答

1

可选可以让你有一个变量为零。然后编译器强制你在使用变量之前检查是否有值。但是,如果您没有可选项,那么对您而言这是一件好事 - 您不必检查确保始终有一个值的值。

因此你的情况,你不希望一个可选的有,重写代码如下:

let cameras = session.devices.flatMap { $0 } 
guard !cameras.isEmpty else { throw CameraControllerError.noCamerasAvailable } 

因为显然通话session.devices.flatMap { $0 }返回数组[AVCaptureDevice],而不是一个可选的阵列[AVCaptureDevice]?。因此,编译器可以保证摄像机总是有一个数组值,而不是零。因此,您可以防止空阵列,这意味着没有摄像头(因为摄像头列表是空的)。

+1

我想你忘了在.isEmpty和{ – coder

+0

之间的其他声明是的,谢谢注意 –

相关问题