2017-12-27 292 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

之間的其他聲明是的,謝謝注意 –

相關問題