SwiftのUnderscore.js風ライブラリ見つけた
移転しました →
前にObjective-C向けのを見つけてこんなのを書いた。
Underscore.js風Objective-Cライブラリ「_.m」 - PILOG
Swiftにも早速似たようなのが出てきたようだ。
サンプルで比較
例として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つらい。