NSArray+Functional.h 1023 B

123456789101112131415161718192021222324252627
  1. //
  2. // NSArray+Functional.h
  3. // FLEX
  4. //
  5. // Created by Tanner Bennett on 9/25/19.
  6. // Copyright © 2019 Flipboard. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. @interface NSArray<T> (Functional)
  10. /// Actually more like flatmap, but it seems like the objc way to allow returning nil to omit objects.
  11. /// So, return nil from the block to omit objects, and return an object to include it in the new array.
  12. /// Unlike flatmap, however, this will not flatten arrays of arrays into a single array.
  13. - (__kindof NSArray *)flex_mapped:(id(^)(T obj, NSUInteger idx))mapFunc;
  14. /// Like flex_mapped, but expects arrays to be returned, and flattens them into one array.
  15. - (__kindof NSArray *)flex_flatmapped:(NSArray *(^)(id, NSUInteger idx))block;
  16. - (instancetype)flex_filtered:(BOOL(^)(T obj, NSUInteger idx))filterFunc;
  17. - (void)flex_forEach:(void(^)(T obj, NSUInteger idx))block;
  18. + (instancetype)flex_forEachUpTo:(NSUInteger)bound map:(T(^)(NSUInteger))block;
  19. - (instancetype)sortedUsingSelector:(SEL)selector;
  20. @end