【swift】Optional Bindingについて
前回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まとめでした。