yaakaito.org

Overline0.2.0とBlocksKit併用版を公開しました

Objective-C, Overline, iOS

こんにちは!うきょーです! Objective-C用ユーティリティ、Overline 0.2.0を公開しました。0.1.5は6時間くらいの命でした。 同時に0.1.xで問題になっていたBlocksKitと一緒に使うとassertで死ぬ問題を回避した、Overline-BlocksKitを公開しています。

BlocksKitと一緒に使う場合

Overline-BlocksKitを利用します。Podfileはこんな感じ。

1
2
pod 'BlocksKit'
pod 'Overline-BlocksKit'

重複を解決するために、いくつかショートハンドのメソッドを削除しています。 削除されているのは、NSArray NSDictionary NSSet にある以下のメソッドです。

  • each:
  • map:
  • reduce:memo:
  • filter:
  • reject:

ショートハンドは削除されますが、Objective-Cっぽい方はそのまま使えます。このあたりはBlocksKitが実装してくれているので、そちらをご利用ください。

追加された機能とか

たらたらと紹介していきます。全部書くのはだるいので全部じゃないです。0.1.0から0.2.0までの変更のうちいろいろという感じです。

NSArray arrayWithRange

指定した範囲のNSArrayを作ります、NSNumber自体が使いにくいので、あんまり使わないですかね。

1
2
NSArray *array = [NSArray arrayWithRangeFrom:0 to:10];
// @[@0, @1, @2, @3, @4, @5, @6, @7, @8, @9]

逆方向にも行けます

1
2
NSArray *array2 = [NSArray arrayWithRangeFrom:0 to:-10 step:2];
// @[@0, @-2, @-4, @-6, @-8]

NSArray uniqueObjects

まんま、ユニークなものだけ返ってきます。

1
2
NSArray *uniqueObjects = [@[@1, @2, @3, @1, @3, @4, @5] uniqueObjects];
// @[@1, @2, @3, @4, @5]

比較の部分をBlocksで書ける uniqueObjectsUsingEqualsBlock: もあります。

その他NSArray

subArray diffrence reversed とかが地味に増えました。

NSDictionary arrayMap

そもそもmapおかしくね?となって、追加した。

1
2
3
4
5
6
7
8
9
[@{
    @"a" : @1,
    @"b" : @2,
    @"c" : @3,
    @"d" : @4
} mappedArrayUsingBlock:^(id obj, NSString *key) {
    return @([obj integerValue] * 2);
}];
// @[@2,@4,@6,@8]

NSDictionary objectForKey:transformBlock: pathForKey:

objectForKey:したあとに変換してーというのが面倒なので、Blocksでまとめられるようにしました。

1
2
3
4
5
NSDate *date = [JSON objectForKey:@"date8601" transformBlock:^id(id obj) {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy/MM/dd HH:mm:ss Z"];
    return [formatter dateFromString:obj];
}];

とか、あとはstringForKey: dateForKey:usingFormat: bookForKey:withTrueValue: integerForKey: などもろもろ。多いのでREADMEかテストを見てください。

objectForPath:hoge.fuga みたいなので階層を辿れる。 valueForKey とか valueForKeyPath でも出来たはずだけど、本来その目的に使う物ではないはずなので、あんまり使っちゃ駄目だと思います。

こっちのtransformとかの対応そういえばやってなかった・・・

多分大きめなのはこれくらいかと思います。はい。

よろしくね!

Overline