2

我想过滤 NSSet:

NSSet* contents = [self.content objectsPassingTest:^(id obj, BOOL* stop){
        NSNumber* chapterNo = ((LTContent*)obj).chapterNo;
        return [chapterNo integerValue] < 0;
    }];

但是这段代码会引发错误:incompatible block pointer types sending 'int (^)(id, BOOL *)' to parameter of type 'BOOL (^)(id, BOOL *)

如果我更改代码:

NSSet* contents = [self.content objectsPassingTest:^(id obj, BOOL* stop){
        NSNumber* chapterNo = ((LTContent*)obj).chapterNo;
        BOOL a = [chapterNo integerValue] < 0;
        return a;
    }];

它完美无缺。但我不想使用奇数行。第一个片段有什么问题?

4

2 回答 2

4

您忘记了块的返回类型:

NSSet* 内容 = [self.content objectsPassingTest:^ BOOL (id obj, BOOL* stop) {
于 2013-06-27T15:03:41.823 回答
3

指定块的显式返回类型BOOL

NSSet* contents = [set objectsPassingTest:^BOOL(id obj, BOOL* stop) {
    // ...
    return [chapterNo integerValue] < 0;
}];

否则,编译器会从 return 语句派生返回类型,这就是int你的情况。

于 2013-06-27T15:03:51.630 回答