kitoko552.memo

kitoko552のメモ

Swift2.0にtry?を使ってスマートにError Handlingをする

Swift2.0でError Handlingの機能が追加されました。
しかしError Handlingを行うと、ネストが増えたり、一度varで宣言してからdo catchを書いたりと、コードがスマートに書けませんでした。

var audioInput: AVCaptureInput?
do {
    audioInput = try AVCaptureDeviceInput(device: device)
} catch {
    audioInput = nil
}

確実にerrorがthrowされないと分かっている場合はtry!を使えますが、もしthrowされた場合はアプリが落ちるので、as!と同様基本的には使わない方がいいでしょう。

// 非推奨
let audioInput = try! AVCaptureDeviceInput(device: device)

しかし、Xcode7.0 beta6からtry?が導入されました。 try?errorがthrowされた場合は左辺にnilを代入するというものです。 これを用いると上の問題が解決されます。

// errorが発生した場合はnilが代入される。
let audioInput = try? AVCaptureDeviceInput(device: device)

状況によりますが、上のような場合だとtry?の方が確実にスマートなのでこちらを使うようにした方が良いと思います。