2013-01-11 46 views
7

比方說,我有一個包含類型ID <形狀>的NSSet使用謂詞返回對象匹配給定類

的對象集合的NSSet中。 。 。其中有CircleShape,SquareShape,HexagonalShape實例放入其中(不是真正的協議或類名稱)。 。

是否可以使用謂詞或另一行代碼來返回CircleShape的所有實例?

回答

11

可以使用基於塊的謂詞是這樣的:

NSSet *yourSet = ...; 
NSPredicate *pred = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) { 
    return [evaluatedObject isKindOfClass:[CircleShape class]]; 
}]; 
NSSet *filteredSet = [yourSet filteredSetUsingPredicate:pred]; 

這將返回的CircleShape子類CircleShape所有實例或。如果您只想要類的實例,但不想使用子類,請使用isMemberOfClass