object-c基于块的遍历方式

来源:互联网 发布:古装网络剧2017 编辑:程序博客网 时间:2024/05/29 17:12

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,块并行执行和反向等

0 0
原创粉丝点击