Pebble's Diary

プログラマーの作業メモ

Objective-Cでruby風のシンタックスシュガーを使う

githubを眺めていたら面白そうなプロダクトを見つけたので紹介します。

NSArrayやNSDictionaryにカテゴリを使って、ruby風のシンタックスシュガーを使えるようにしています。 Objective-C と RubyMotion の中間のような感じです。

https://github.com/mneorr/ObjectiveSugar

私が気に入ったのは、これ。 NSArrayのカテゴリです。

- (id)detect:(BOOL (^)(id object))block {
    for (id object in self) {
        if (block(object))
            return object;
    }
    return nil;
}

例えば、以下のようなクラスの集まりのNSArrayに対して、

@interface Coffee
@property (strong) NSUInteger identifier;
@property (strong) NSString* name;
@end

Coffee* coffee = [coffees detect:^BOOL(id aCoffee) {
    return ( [aCoffer.name isEqualToString:@"CafeMoca"]);
}];

このように使えば、nameが@"CafeMoca"のインスタンスが見つかったときに、そのインスタンスを返し、 見つからなかったときはnilを返すという使い方ができます。

仕事で使うと嫌がられるかも知れませんが、プライベートなプロジェクトでは使ってみようかと思います。