4
4

More than 5 years have passed since last update.

もっと気軽にEachしたい!Mapもしたい!

Posted at

背景

タイトルにある通り。enumerateObjectsUsingBlockって、なんか気軽じゃない。
filteredArrayUsingPredicate + predicateWithBlockなんて、書いたことも無い。

ほぼ純粋なシンタックスシュガーですが、特にmapは手放せなくなります。

mapについて

返り値がnilの場合には結果から除外されます。これを利用すると、簡単なフィルターとして使用できます。
nilを返す必要がある場合には、[NSNull null]を使用してください。

実装

NSArray用カテゴリ

NSArray+BTKCollection.h
//
//  NSArray+BTKCollection.h
//  BTKCommons
//
//  Created by Tomohisa Ota on 2/28/14.
//  Copyright (c) 2014 Tomohisa Ota. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSArray (BTKCollection)

- (void) btk_each:(void (^)(id obj, NSUInteger idx, BOOL *stop))block;

- (NSArray*) btk_map:(id (^)(id obj, NSUInteger idx, BOOL *stop))block;

@end
NSArray+BTKCollection.m
//
//  NSArray+BTKCollection.m
//  BTKCommons
//
//  Created by Tomohisa Ota on 2/28/14.
//  Copyright (c) 2014 Tomohisa Ota. All rights reserved.
//

#import "NSArray+BTKCollection.h"

@implementation NSArray (BTKCollection)

- (void) btk_each:(void (^)(id obj, NSUInteger idx, BOOL *stop))block
{
    if(block == nil){
        return;
    }
    [self enumerateObjectsUsingBlock:block];
}

- (NSArray*) btk_map:(id (^)(id obj, NSUInteger idx, BOOL *stop))block;
{
    if(block == nil){
        return nil;
    }
    NSMutableArray *mArray = [[NSMutableArray alloc]initWithCapacity:self.count];
    [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        id mappedObj = block(obj,idx,stop);
        if(mappedObj){
            [mArray addObject:mappedObj];
        }
    }];
    return mArray.copy;
}

@end

NSDictionary用カテゴリ

NSDictionary+BTKCollection.h
//
//  NSDictionary+BTKCollection.h
//  BTKCommons
//
//  Created by Tomohisa Ota on 2/28/14.
//  Copyright (c) 2014 Tomohisa Ota. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSDictionary (BTKCollection)

- (void) btk_each:(void (^)(id key, id obj, BOOL *stop))block;

@end
NSDictionary+BTKCollection.m
//
//  NSDictionary+BTKCollection.m
//  BTKCommons
//
//  Created by Tomohisa Ota on 2/28/14.
//  Copyright (c) 2014 Tomohisa Ota. All rights reserved.
//

#import "NSDictionary+BTKCollection.h"

@implementation NSDictionary (BTKCollection)

- (void) btk_each:(void (^)(id key, id obj, BOOL *stop))block
{
    if(block == nil){
        return;
    }
    [self enumerateKeysAndObjectsUsingBlock:block];
}

@end
4
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4