NSArray *anArray=/*...*/;
[anArray enumerateObjectUsingBlock]:
^(id object,NSUInter idx,BOOL *stop){
// do something
if(shouldStop){
*stop = yes;
}
}];
在当前object-c语言,最新引入的做法就是基于block的便利方式。
NSArray中定义方法如下:
- void enumerateObjectUsingBlock:(void (^)(id object,NSUInterger idx, BOOL *stop)) block
这三个参数 分别是id object表示当前迭代所针对的对象,别看这个不起眼,但是却非常有用,因为id类型可以被其他类型复写,所以如果块的签名能修改,指定对象的精确类型,便于编译器检查出开发者是否调用了该对象所不具备的方法。
例子如下:
NSDictionary *aDic = /**/
[aDic enumerateKeysAndObjectsUsingBlock:^(NSString* key,NSString* object, BOOL * stop){
//do something
}];
idx表示所针对的数组下标。。
stop为可以传入参数,终止遍历操作。
NSDictionary和NSSet方法同样。
<pre name="code" class="objc">
- void enumerateKeyAndObjectsUsingBlock:(void (^)(id key,id object,BOOL *stop))block
<pre name="code" class="objc">- void enumerateKeyAndObjectsUsingBlock:(void (^)(id object,BOOL *stop))block
此方法还支持执行反向遍历,另外一个版本都带有WithOptions
- void enumerateObjectWithOptions:NSEnumerationOptions options usingBlock :(void (^)(id object,NSUInterger idx, BOOL *stop)) block
Options是个enum,支持诸如NSEnumerationConcurrent 和NSEnumerationReverse,块并行执行和反向等