enumerateObjectsUsingBlock是否会返回任何BOOL值?

时间:2014-08-05 23:07:26

标签: ios enumeration objective-c-2.0

当我在NSArray上搜索enumerateObjectsUsingBlock时,意外地转到提供相同方法签名的NSSet Class Reference ... Doc说

Executes a given Block using each object in the set.
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, BOOL *stop))block
block: The Block to apply to elements in the set.

obj:The element in the set.

stop:A reference to a Boolean value. The block can set the value to YES to stop further processing of the set. The stop argument is an out-only argument. You should only ever set this Boolean to YES within the Block.

Block返回一个布尔值,指示obj是否通过了测试。

返回布尔值是什么?由于块被声明为返回void,并且“stop”参数只能设置为“YES”,它的失败测试消息如何从块中传出?

在我测试期间,我将此方法分配给BOOL,但是编译器警告“使用不兼容类型'void'”的表达式初始化'BOOL'(又名'signed char')

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

这是文档中的错误。枚举块永远不会返回任何内容,正如您在块的签名中注意到的那样。

答案 1 :(得分:2)

这是文档中的错误。正如签名所示,块中没有返回BOOL

该评论似乎是objectsPassingTest:等方法的复制/粘贴问题。

文档中每个页面底部都有一个链接,用于报告反馈。让Apple知道错误。

答案 2 :(得分:2)

该块不会返回布尔值。该块传递 引用到布尔值。在块内部,它应设置为YES以指示枚举应该停止。

    [items enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {
        if (obj == something){
            *stop = YES;
        }
    }];

documentation for NSArray并不表示块返回布尔值:

  

使用数组中的每个对象执行给定的块,从第一个对象开始,然后通过数组继续到最后一个对象。

块签名表示它返回void。

(void (^)(id obj, BOOL *stop))

第一个空格:( void (^)(id obj,BOOL * stop))是块的返回类型。