2013-06-27 164 views
2

我想要得到filtred的NSSet:不兼容的塊指針類型objectsPassingTest:

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; 
    }]; 

它的作品完美。但我不想用奇數行。第一個片段有什麼問題?

回答

3

指定明確的返回類型BOOL的塊:

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

否則編譯器派生從 return語句返回類型,那就是int你的情況。

+0

太棒了!謝謝! –

4

你忘了塊的返回類型:

NSSet* contents = [self.content objectsPassingTest:^BOOL(id obj, BOOL* stop) {
+0

太棒了,謝謝! –