The project is trying to implement higher order functions with similar manners in Swift standard library. Currently Map
, Filter
, Reduce
, Contains
, ForEach
and FlatMap
with/without class restrictor have been implemented for NSArray.
Iterate an array and applies the same block operation to each element in it.
Without class restrictor
[array map:^id(id obj) { return [(NSString *)obj uppercaseString]; }]
With class restrictor
[array map:^id(id obj) { return [(NSString *)obj uppercaseString]; } class:[NSString class]]
Iterate an array and return elements that meet a condition.
Without class restrictor
[array filter:^BOOL(id obj) { return [(NSString *)obj isEqualToString:@"o"]; }]
With class restrictor
[array filter:^BOOL(id obj) { return [(NSString *)obj isEqualToString:@"o"]; } class:[NSString class]]
Combine all elements in an array to create a single output.
Without class restrictor
[array reduce:@"Hey, " block:^id(id obj1, id obj2) { return [NSString stringWithFormat:@"%@%@", obj1, obj2]; }]
With class restrictor
[array reduce:@"Hey, " block:^id(id obj1, id obj2) { return [NSString stringWithFormat:@"%@%@", obj1, obj2]; } class:[NSString class]]
Iterate an array and check if any element satisfies a condition.
Without class restrictor
[array contains:^BOOL(id obj) { return [(NSString *)obj isEqualToString:@"H"]; }]
With class restrictor
[array contains:^BOOL(id obj) { return [(NSString *)obj isEqualToString:@"H"]; } class:[NSString class]]
A short-hand for the for loop.
Without class restrictor
[array forEach:^(id obj) { NSLog(@"%@", obj); } ]
With class restrictor
[array forEach:^(id obj) { NSLog(@"%@", obj); } class:[NSString class]]
Flatten an array of arrays.
Without class restrictor
[array flatMap:^id(id obj) { return obj; }]
With class restrictor
[array flatMap:^id(id obj) { return obj; } class:[NSString class]]