NSArray+Lookin.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //
  2. // NSArray+Lookin.h
  3. // Lookin
  4. //
  5. // Created by Li Kai on 2018/9/3.
  6. // https://lookin.work
  7. //
  8. #import "LookinDefines.h"
  9. #import <Foundation/Foundation.h>
  10. #import <CoreGraphics/CoreGraphics.h>
  11. @interface NSArray<__covariant ValueType> (Lookin)
  12. /**
  13. 初始化一个新的 NSArray 并返回,新数组的长度为 count,如果当前数组长度比 count 小则会补充新元素(被补充的元素由 addBlock 返回),如果当前数组长度比 count 大则会舍弃多余的元素,被舍弃的元素会作为参数传入 removeBlock。最终,新数组的所有元素均会作为参数被传入 doBlock。
  14. */
  15. - (NSArray<ValueType> *)lookin_resizeWithCount:(NSUInteger)count add:(ValueType (^)(NSUInteger idx))addBlock remove:(void (^)(NSUInteger idx, ValueType obj))removeBlock doNext:(void (^)(NSUInteger idx, ValueType obj))doBlock __attribute__((warn_unused_result));
  16. + (NSArray *)lookin_arrayWithCount:(NSUInteger)count block:(id (^)(NSUInteger idx))block;
  17. /**
  18. 检查 index 位置是否有元素存在
  19. */
  20. - (BOOL)lookin_hasIndex:(NSInteger)index;
  21. - (NSArray *)lookin_map:(id (^)(NSUInteger idx, ValueType value))block;
  22. - (NSArray<ValueType> *)lookin_filter:(BOOL (^)( ValueType obj))block;
  23. - (ValueType)lookin_firstFiltered:(BOOL (^)(ValueType obj))block;
  24. /// 返回最后一个 block 返回 YES 的元素
  25. - (ValueType)lookin_lastFiltered:(BOOL (^)(ValueType obj))block;
  26. - (id)lookin_reduce:(id (^)(id accumulator, NSUInteger idx, ValueType obj))block;
  27. - (CGFloat)lookin_reduceCGFloat:(CGFloat (^)(CGFloat accumulator, NSUInteger idx, ValueType obj))block initialAccumlator:(CGFloat)initialAccumlator;
  28. - (NSInteger)lookin_reduceInteger:(NSInteger (^)(NSInteger accumulator, NSUInteger idx, ValueType obj))block initialAccumlator:(NSInteger)initialAccumlator;
  29. - (BOOL)lookin_all:(BOOL (^)(ValueType obj))block;
  30. - (BOOL)lookin_any:(BOOL (^)(ValueType obj))block;
  31. - (NSArray<ValueType> *)lookin_arrayByRemovingObject:(ValueType)obj;
  32. - (NSArray<ValueType> *)lookin_nonredundantArray;
  33. - (ValueType)lookin_safeObjectAtIndex:(NSInteger)idx;
  34. /// 字符串长度从短到长,即 length 小的字符串的 idx 更小
  35. - (NSArray<ValueType> *)lookin_sortedArrayByStringLength;
  36. @end
  37. @interface NSMutableArray<ValueType> (Lookin)
  38. /**
  39. 如果当前数组长度比 count 小则会补充新元素(被补充的元素由 addBlock 返回),如果当前数组长度比 count 大则多余的元素会被作为参数传入 notDequeued。然后从 idx 为 0 算起,前 count 个元素会被作为参数传入 doBlock
  40. */
  41. - (void)lookin_dequeueWithCount:(NSUInteger)count add:(ValueType (^)(NSUInteger idx))addBlock notDequeued:(void (^)(NSUInteger idx, ValueType obj))notDequeuedBlock doNext:(void (^)(NSUInteger idx, ValueType obj))doBlock;
  42. - (void)lookin_removeObjectsPassingTest:(BOOL (^)(NSUInteger idx, ValueType obj))block;
  43. @end