NSDictionary でキーの存在を確認する - Objective-C プログラミング

PROGRAM


NSDictionary でキーの存在を確認する

Objective-C の NSDictionary で、キーが登録されているかを確認する方法について調べてみました。

NSDictionary 自体にはキーの存在を確認する "ため" のメソッドは用意されていないみたいなので、"allKeys" の "containsObject:" を使用してキー全体の配列を取得して確認する方法や、または "objectForKey:" を使用して値を取得できるかを確認する方法で、判定することになるのでしょうか。

"allKeys" を使う方法

NSArray には、配列の中に指定した値が存在するかを確認する "containsObject:" というメソッドが用意されているので、キーの一覧を配列で取得して、その中に目的のキーが存在しているかを調べることができます。

BOOL is_exists = [dictionary.allKeys containsObject:key];

たとえばこのようにすることで、NSDictionary 型の "dictionary" 変数に、変数 "key" で指定したキーが存在するかを調べることができます。

ただし、このとき、値として nil を設定したキーは allKeys に含まれないことに注意します。これはもともと NSDictionary が、値に nil が設定されたキーを消去するためのようです。

"objectForKey:" を使用する方法

NSDictionary の "objectForKey:" メソッドは、キーが存在しなかった場合に nil を返すのを利用して、目的のキーが存在するかを判定することもできます。

BOOL is_exists = ([dictionary.objectForKey:key] != nil);

こちらの場合は、NSDictionary のキーから値を取り出す操作をしているので、その値を別の変数に保存してから nil 判定することで、nil ではなかった場合に、すぐにその値を使って何かができるところが便利なように思います。

もちろん、値として nil を設定したキーを取り出した場合には nil が返されてきますが、そもそも NSDictionary では、値として nil を設定したキーは消去されてしまうようなので、存在しないものとして判定しても妥当に思います。

[ もどる ]