前にObjective-C向けのを見つけてこんなのを書いた。

Underscore.js風Objective-Cライブラリ「_.m」 - ぴよログ

Swiftにも早速似たようなのが出てきたようだ。

Dollar.$wift by ankurpDollar.$wift by ankurp

サンプルで比較

例としてfindのサンプルを。

Swift

1$.find([1, 2, 3, 4, 5, 6], iterator: { $0 == 2 })
2=> 2

Objective-C

1N* even = _.find(AI(1, 2, 3, 4, 5, 6), ^B(N* num){ return num.I % 2 == 0; });
2=> 2

Objective-CのほうはAIとかいうマクロで配列を表現したり、ブロックの部分が書きにくかったりするので少々複雑に見える。Swiftのほうがやはりシンプルに書けるようだ。

実装を比較

findの実装も見比べてみる。

Swift

1class func find<T: Equatable>(array: T[], iterator: (T) -> Bool) -> T? {
2    for elem in array {
3        let result = iterator(elem)
4        if result {
5            return elem
6        }
7    }
8    return nil
9}

Objective-C

 1+ (id(^)(id list, _FindBlock iterator))find
 2{
 3  return ^(id list, _FindBlock iterator) {
 4    __block id result;
 5    _.any(list, ^B(id value, ... /* KEY, LIST */) {
 6      if (iterator(value)) {
 7        result = value;
 8        return true;
 9      }
10      return false;
11    });
12    return result;
13  };
14}

Objective-Cつらい。