NSDictionaryから指定した型で値を取り出したい時はよくあると思います。またWeb APIを叩いてJSONをパースしてNSDictionaryに格納。そのNSDictionaryがNSDictionaryをネストして格納していることもよくあります。そこから値を取り出すのは面倒です。そこでそれらの取り出しを簡単にするカテゴリメソッドを作り、GitHubにコミットしました。MIT Licenseです。

NSDictionary+STHelper

使い方

以下のファイルを自分のプロジェクトへコピーするだけです。

  • NSDictionary+STHelper.h
  • NSDictionary+STHelper.m
  • NSMutableDictionary+STHelper.h
  • NSMutableDictionary+STHelper.m

指定した型で値を取り出す

NSInteger value = [dict st_integerForKey:@"value"];

NSInteger型で値を取り出す。格納されている値がNSNumberもしくは数値文字列でなければ0を返します。

NSInteger value = [dict st_integerForKey:@"value" defaultValue:123];

値が取得できなかった時返す値を0以外にしたい時は、defautValue引数を指定します。

その他、st_doubleForKey,st_arrayForKeyなど色々な型で取り出すメソッドを用意しました。

JSONをパースした結果のNSDictionaryから値を取り出す

{
  user: {
    first_name: "Nyusoku",
    middle_name: "De",
    last_name: "Yaruo"
  },
  profile_image_file: "profile.png"
}

このようなJSONをJSON Frameworkを使うなどしてパースするとネストしたNSDictionaryが得られます

NSDictionary *user = [json objectForKey:@"user];
NSString *firstName = [user objectForKey:@"first_name"];

このようにするのは面倒ですし、型が正しいかのチェックまで行うとさらに大変です。

NSString *firstName = [json st_stringForPath:@"user.first_name"];

本カテゴリメソッドを使うと、このようにして取得できます。型が不一致、NSStringでない場合はnilを返します。

NSString *firstName = [json st_stringForPath:@"user.first_name defaultValue:@"nanashisan"];

このようにデフォルト値を返すことも可能です。

指定した型を設定する

NSMutableDictionaryに数値を格納するとき、NSNumberオブジェクトに変換する必要があります。

[dict setObject:[NSNumber numberWithInteger:123] forKey:@"integer"]

これを毎回書くのも面倒なので、以下の様なカテゴリメソッドを作りました。

[dict st_setInteger:123 forKey:@"integer"]

他にも様々な型に対応しています。