CocoaPods trunk is moving to be read-only. Read more on the blog, there are 19 months to go.
TestsTested | ✓ |
LangLanguage | Obj-CObjective C |
License | MIT |
ReleasedLast Release | Feb 2016 |
Maintained by Ryan Gerard.
NSUnderscore is a set of categories added to NSArray, NSDictionary, and NSSet. This project is an attempt to bring some of the useful functionality found in Underscore.js to the world of iOS programming. Not every single function has been ported over, as some functions are already implemented on the collection objects.
Start by importing the appropriate category:
#import "NSUnderscore/NSArray+NSUnderscoreAdditions.h"
or
#import "NSUnderscore/NSDictionary+NSUnderscoreAdditions.h"
or
#import "NSUnderscore/NSSet+NSUnderscoreAdditions.h"
The following functions are available to you:
NSArray *objects = @[@(2), @(4)];
__block NSInteger total = 0;
[objects each:^(NSNumber *object) {
total += object.integerValue;
}];
// Result: total == 6
NSArray *objects = @[@(2), @(3)];
NSArray *modifiedObjects = [objects map:(id)^(NSNumber *object) {
return @(object.integerValue * 2);
}];
// Result: modifiedObjects == @[ @(4), @(6) ]
NSArray *objects = @[@(2), @(4)];
NSNumber *reduced = [objects reduce:(id)^(NSNumber *object, NSNumber *previousValue) {
return @(object.integerValue + previousValue.integerValue);
}];
// Result: reduced == @(6)
NSArray *objects = @[@(2), @(4)];
NSArray *filtered = [objects filter:(id)^(NSNumber *object) {
return object.integerValue == 2;
}];
// Result: filtered == @[ @(2) ]
NSArray *objects = @[@(2), @(4)];
NSArray *filtered = [objects reject:(id)^(NSNumber *object) {
return object.integerValue == 2;
}];
// Result: filtered == @[ @(5) ]
NSArray *objects = @[@(2), @(4)];
BOOL result = [objects every:^BOOL(NSNumber *object) {
return object.integerValue > 0;
}];
// Result: result == YES
NSArray *objects = @[@(-2), @(4)];
BOOL result = [objects some:^BOOL(NSNumber *object) {
return object.integerValue < 0;
}];
// Result: result == YES
NSArray *objects = @[@{@"id": @(1)}, @{@"id": @(2)}];
NSArray *plucked = [objects pluck:@"id"];
// Result: plucked == [ @(1), @(2) ]
NSArray *objects = @[@{@"id": @(10)}, @{@"id": @(20)}];
NSDictionary *maxValue = [objects max:^NSInteger(NSDictionary *dict) {
NSNumber *dictVal = (NSNumber *)[dict objectForKey:@"id"];
return dictVal.integerValue;
}];
// Result: maxValue == @{@"id": @(20)}
NSArray *objects = @[@{@"id": @(10)}, @{@"id": @(20)}];
NSDictionary *minValue = [objects max:^NSInteger(NSDictionary *dict) {
NSNumber *dictVal = (NSNumber *)[dict objectForKey:@"id"];
return dictVal.integerValue;
}];
// Result: minValue == @{@"id": @(10)}
NSArray *testObjects = @[@{@"token": @"ryan-1"}, @{@"token": @"ryan-2"}, @{@"token": @"test-1"}];
NSDictionary *groupedObjects = [testObjects groupBy:^id(NSDictionary *val) {
NSString *token = [val objectForKey:@"token"];
return [token substringToIndex:4];
}];
// Result: @{ @"ryan": [@{@"token": @"ryan-1"}, @{@"token": @"ryan-2"}], @"test": [@{@"token": @"test-1"}] }
NSArray *objects = @[@{@"token": @"1"}, @{@"token": @"2"}, @{@"token": @"3"}];
NSDictionary *indexedObjects = [objects indexBy:^id(NSDictionary *val) {
return [val objectForKey:@"token"];
}];
// Result: @{ @"1": @{@"token": @"1"}, @"2": @{@"token": @"ryan-2"}, @"3": @{@"token": @"3"}] }
NSArray *objects = @[@(1), @(2), @(3)];
NSDictionary *countedObjects = [objects countBy:^id(NSNumber *val) {
return val.integerValue % 2 == 0 ? @"even": @"odd";
}];
// Result: @{ @"even": 1, @"odd": 2 }
NSArray *objects = @[@(1), @(2), @(3)];
NSDictionary *partitionedObjects = [objects partition:^BOOL(NSNumber *val) {
return val.integerValue % 2 == 0;
}];
// Result: @[ @[ @(2) ], @[ @(1), @(3) ] ]