Underscore.mは簡単に言えばUnderscore.jsのObjective-C版です。
導入方法はCocoaPodsで簡単なので省略します。利用方法もいろいろな日本語サイトで解説しているので省略。
ここでは、IIJmioのiOSサンプルアプリケーションでの利用例を少しだけ紹介します。
ひとつめは、ネットワーク通信でディクショナリからクエリ文字列 (foo=bar&hoge=fuga
のような文字列) を作成する場合です。
NSDictionary* query_dic = @{@"foo":@"bar",@"hoge":@"fuga"}; NSURLComponents* comp = [NSURLComponents componentsWithString:@"http://api.example.com/auth"]; comp.query = [Underscore.dict(query_dic).map(^id(id key, id obj) { return [NSString stringWithFormat:@"%@=%@", key, obj]; }).values.unwrap componentsJoinedByString:@"&"];
comp.URL
でNSURL
に変換できます。
逆に、OAuth2のコールバックURLに付いたフラグメントからパラメータを取るときにも使っています。
NSDictionary* params = Underscore.array([request.URL.fragment componentsSeparatedByString:@"&"]).reduce(@{}, ^(NSDictionary* a, NSString* str) { NSArray* kv = [str componentsSeparatedByString:@"="]; return Underscore.extend(a, @{ kv[0]:kv[1] }); });
なお、前者に関してはAFNetworking 2.0のAFHTTPRequestOperationManagerを利用すれば、パラメータをディクショナリでそのまま渡せるのでもっと楽に書けます。
おわりに
Underscore.mの利用例を紹介しました。
なお、大量のブラケット ([]
) がなくなる代わりに、Xcodeでの補完が難しくなるのがちょっと困りものです。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。