前にObjective-C向けのを見つけてこんなのを書いた。
Underscore.js風Objective-Cライブラリ「_.m」 - ぴよログ
Swiftにも早速似たようなのが出てきたようだ。
Dollar.$wift by ankurp
サンプルで比較
例としてfindのサンプルを。
Swift
$.find([1, 2, 3, 4, 5, 6], iterator: { $0 == 2 })
=> 2
Objective-C
N* even = _.find(AI(1, 2, 3, 4, 5, 6), ^B(N* num){ return num.I % 2 == 0; });
=> 2
Objective-CのほうはAI
とかいうマクロで配列を表現したり、ブロックの部分が書きにくかったりするので少々複雑に見える。Swiftのほうがやはりシンプルに書けるようだ。
実装を比較
findの実装も見比べてみる。
Swift
class func find<T: Equatable>(array: T[], iterator: (T) -> Bool) -> T? {
for elem in array {
let result = iterator(elem)
if result {
return elem
}
}
return nil
}
Objective-C
+ (id(^)(id list, _FindBlock iterator))find
{
return ^(id list, _FindBlock iterator) {
__block id result;
_.any(list, ^B(id value, ... /* KEY, LIST */) {
if (iterator(value)) {
result = value;
return true;
}
return false;
});
return result;
};
}
Objective-Cつらい。