IIJmioのiOSサンプルアプリでは、NSJSONSerialization
で得られたNSDictionary
をそのまま用いていました。
そのため、Key-Value Coding (KVC)を使うことができて、 その中のCollection Operatorsが使ってみて割と便利だったので、利用例を紹介します。
KVCの例
例えば、IIJmioのデータ利用量照会で得られるJSONデータから、30日間のクーポン利用状況の配列を得たいとします。
そのためには、ディクショナリの配列からキーwithCoupon
の値のみを取り出す操作が必要になります。例えば、Underscore.mを用いると次のようになります。
NSArray* value = Underscore.array(packetLog).map(^id(NSDictionary* e) { return @([e[@"withCoupon"] intValue]); }).unwrap;
これが、KVCを用いると次のようになります。
NSArray* value = [packetLog valueForKeyPath:@"withCoupon"];
Collection Operatorの例
また、先ほどのJSONデータから30日間のクーポン利用合計を得たいとします。
Underscore.mで書くなら次のようになります。
long long total = [Underscore.array(couponInfo[@"coupon"]).reduce(@0, ^id(NSNumber* v, NSDictionary* e) { return @(v.intValue + [e[@"volume"] intValue]); }) intValue];
もっと簡単に書くには、Collection Operatorsのひとつ@sum
を利用します。
NSNumber* total = [self.info.couponInfo valueForKeyPath:@"coupon.@sum.volume"];
@sum
以外にも、@avg
や@min
、@max
などもあります。詳細はAppleの公式ドキュメントを参照してください。
おわりに
KVCのCollection Operatorsについて紹介しました。
ちなみに、MioDashboardではMantleを利用しているので、現在は用いていないです。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。