前回swiftでのnil
の取り扱いについてまとめました。
今回はnil
を取り扱う時に便利な記法のOptional Bindingについてまとめます。
Optional Binding
必要になるケース
例えば、関数の中には返り値がOptionalなものがあります。
配列からindexの値を取得するfind
などがそうです。
var array: [String] = ["a", "b", "c"] find(array, 'c') // 2 find(array, 'd') // nil
そこで、find
の返り値を定数に代入してみます。
let index: NSNumber = find(array, 'd') // nil
これはコンパイルエラーになります。
定数index
はoptionalな定数ではないので、nil
は代入できません。
let index: NSNumber? = find(array, 'd') // nil
Optionalにすればnil
を代入できるようになるので、コンパイルが通るようになります。
次は、このindex
の値をもとに配列から要素を削除してみます。
array.removeAtIndex(index)
これはコンパイルエラーになります。
index
はオプショナルな定数なので!
をつける必要があります。
array.removeAtIndex(index!)
これは、コンパイルは通りますが、index
はnil
なので、ランタイムエラーが発生します。
つまり
index
の値がnil
じゃ無いときに、配列から要素を削除したいのです。
これを、Optional Bindingを使用しないとこんな感じになると思います。
var array: [String] = ["a", "b", "c"] let index: NSNumber? = find(array, "d") if index != nil { array.removeAtIndex(index!) }
いちいちindex
を定義してnil
判定するのはとても面倒です。
そこでOptional Bindingを使用します。
var array: [String] = ["a", "b", "c"] if let index: NSNumber = find(array, "d") { array.removeAtIndex(index) }
定数の定義とnil
判定を同時に行うことができます。
ifのブロックの中は値がnil
じゃない時に実行されるため、定数はoptionalではありません。
そのため、!
も必要無くなります。
以上、Optional Bindingまとめでした。