備忘録 データ型についてお勉強しました。
またまた備忘録。
配列や、辞書からデータを取り出すときにfor文使って律儀に(メンドクセと思いながら)こつこつかいてきてた人生だった。こんなふうに。
for (int i = 0; i < nCount; i++) { id hoge = [arrHoge objectAtIndex:i]; // だらだらつづく。 }
高速やーつって。たまに↓もつかうけど、↑に使い慣れてしまったのとインデックスをデータ取り出し以外でも使いたいときがあったんであまり使わなかった。
for (id hoge in arrHoge) { // だらだら }
ある本で勉強したところNSArrayにはenumerateObjectsUsingBlock:ってのがあることを知った。
enumerateObjectsUsingBlock: ブロックを使って配列のすべての要素にアクセスする
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
objにArrayから取り出すオブジェクト、idxに配列のインデックス、stopをYESすると繰り返しを中断する。
enumerateObjectsWithOptions: usingBlock: 配列の全要素に逆順アクセス(オプション指定)
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
NSEnumerationOptionsにNSEnumerationReverceを設定すると配列を逆順アクセスする。
enumerateKeysAndObjectsUsingBlock: ブロックを使って辞書のすべての要素にアクセスする
- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(id key, id obj, BOOL *stop))block
key と objのペアを順次取得する。
制作したアプリで上記の構文に置き換えてみた
あんまり慣れない...w
あと、パッパと置き換えられると思ったけど、ブロックの中身が多くなってしまって可読性悪くなってしまっているなあと思う所がいくつか。
これからは↑の関数を使う前提で設計していく努力をしよう。そうしよう。