测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
发布上次发布 | 2014年12月 |
由 Seivan Heidari 维护。
此 Pod 由
SHFoundationAdditions
使用,作为改进 Foundation、UIKit、CoreLocation、GameKit、MapKit 和 iOS 应用程序架构其他方面的组件。
通过在 Foundation 集合类上定义协议,提供 NSFastEnumeration 辅助工具和枚举块。为键值、索引和无序收集对象提供辅助工具。通过点符号转换为其他集合类。基于块的枚举调用者。经过测试并且就绪。
待办事项:NSIndexSet、NSMutableIndexSet 和 NSEnumerator。
待办事项:键值协议
pod 'SHFastEnumerationProtocols'
将此代码放入特定文件中或项目前缀文件中
#import "<CollectionClass>+SHFastEnumerationProtocols.h"
或适用于所有类
#import "SHFastEnumerationProtocols.h"
#pragma mark - Block Definitions
//obj is the key for keyed indexed classes (NSDictionary, NSMapTable)
typedef void (^SHIteratorBlock)(id obj);
typedef void (^SHIteratorWithIndexBlock)(id obj, NSInteger index) ;
typedef id (^SHIteratorReturnIdBlock)(id obj);
typedef id (^SHIteratorReduceBlock)(id memo, id obj);
typedef BOOL (^SHIteratorPredicateBlock)(id obj);
#pragma mark - <SHFastEnumerationBlocks>
@protocol SHFastEnumerationBlocks <NSObject>
@required
//obj is the key for keyed indexed classes (NSDictionary, NSMapTable)
-(void)SH_each:(SHIteratorBlock)theBlock;
//the loop is on HIGH queue, each iteration on BACKGROUND, completion callback is on main
-(void)SH_concurrentEach:(SHIteratorBlock)theBlock onComplete:(SHIteratorBlock)theCompleteBlock;
//Collect
-(instancetype)SH_map:(SHIteratorReturnIdBlock)theBlock;
//Inject/FoldLeft
-(id)SH_reduceValue:(id)theValue withBlock:(SHIteratorReduceBlock)theBlock;
//Match
-(id)SH_find:(SHIteratorPredicateBlock)theBlock;
//Select/Filter
-(instancetype)SH_findAll:(SHIteratorPredicateBlock)theBlock;
//!Select/Filter
-(instancetype)SH_reject:(SHIteratorPredicateBlock)theBlock;
//Every
-(BOOL)SH_all:(SHIteratorPredicateBlock)theBlock;
//Some
-(BOOL)SH_any:(SHIteratorPredicateBlock)theBlock;
// !Every
-(BOOL)SH_none:(SHIteratorPredicateBlock)theBlock;
@end
#pragma mark - <SHFastEnumerationProperties>
@protocol SHFastEnumerationProperties <NSObject>
@required
@property(nonatomic,readonly) BOOL SH_hasObjects;
@property(nonatomic,readonly) NSArray * SH_toArray;
@property(nonatomic,readonly) NSSet * SH_toSet;
@property(nonatomic,readonly) NSOrderedSet * SH_toOrderedSet;
//The objects are the values while the key will either be an NSNumber index (from ordered)
//or a counted key (unordereD)
@property(nonatomic,readonly) NSDictionary * SH_toDictionary;
@property(nonatomic,readonly) NSMapTable * SH_toMapTableWeakToWeak;
@property(nonatomic,readonly) NSMapTable * SH_toMapTableWeakToStrong;
@property(nonatomic,readonly) NSMapTable * SH_toMapTableStrongToStrong;
@property(nonatomic,readonly) NSMapTable * SH_toMapTableStrongToWeak;
@property(nonatomic,readonly) NSHashTable * SH_toHashTableWeak;
@property(nonatomic,readonly) NSHashTable * SH_toHashTableStrong;
//https://gist.github.com/seivan/6086183
@property(nonatomic,readonly) NSDecimalNumber * SH_collectionAvg;
@property(nonatomic,readonly) NSDecimalNumber * SH_collectionSum;
@property(nonatomic,readonly) id SH_collectionMax;
@property(nonatomic,readonly) id SH_collectionMin;
@end
#pragma mark - <SHFastEnumerationOrderedBlocks>
@protocol SHFastEnumerationOrderedBlocks <NSObject>
@required
-(void)SH_eachWithIndex:(SHIteratorWithIndexBlock)theBlock;
@end
#pragma mark - <SHFastEnumerationOrderedProperties>
@protocol SHFastEnumerationOrderedProperties <NSObject>
@required
@property(nonatomic,readonly) id SH_firstObject;
@property(nonatomic,readonly) id SH_lastObject;
@end
#pragma mark - <SHFastEnumerationOrdered>
@protocol SHFastEnumerationOrdered <NSObject>
@required
-(instancetype)SH_reverse;
-(id)SH_objectBeforeObject:(id)theObject;
-(id)SH_objectAfterObject:(id)theObject;
@end
#pragma mark - <SHMutableFastEnumerationBlocks>
@protocol SHMutableFastEnumerationBlocks <NSObject>
@required
-(void)SH_modifyMap:(SHIteratorReturnIdBlock)theBlock;
-(void)SH_modifyFindAll:(SHIteratorPredicateBlock)theBlock;
-(void)SH_modifyReject:(SHIteratorPredicateBlock)theBlock;
@end
#pragma mark - <SHMutableFastEnumerationOrdered>
@protocol SHMutableFastEnumerationOrdered <NSObject>
@required
-(void)SH_modifyReverse;
-(id)SH_popObjectAtIndex:(NSInteger)theIndex;
-(id)SH_popFirstObject;
-(id)SH_popLastObject;
@end
如果您在项目中使用 SHFastEnumerationProtocols,我非常乐意了解有关的情况。
电子邮件:[email protected]
推特:@seivanheidari
SHFastEnumerationProtocols 是 © 2013 Seivan,可以自由地在 MIT 许可证 下分发。请参阅 LICENSE.md
文件。