【问题标题】:incompatible block pointer types objectsPassingTest:不兼容的块指针类型 objectsPassingTest:
【发布时间】:2013-06-27 23:03:51
【问题描述】:

我想过滤 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;
    }];

效果很好。但我不想使用奇数行。第一个 sn-p 有什么问题?

【问题讨论】:

    标签: ios objective-c objective-c-blocks nsset


    【解决方案1】:

    你忘记了块的返回类型:

    NSSet* 内容 = [self.content objectsPassingTest:^BOOL(id obj, BOOL* stop) {

    【讨论】:

      【解决方案2】:

      为块指定显式返回类型BOOL

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

      否则编译器会从 return 语句,在你的情况下是 int

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        相关资源
        最近更新 更多