Example of NSSet's objectsPassingTest function please?

11.2k Views Asked by At

I'm going nuts here. For some reason I can't find a single, complete example of how to use the objectsPassingTest: function of NSSet (cocoa). Before anyone points me to the pages about blocks, I've seen those. The example given only shows how to declare the function, not the block that operates it, and when I tried their example with my own code it didn't work. I just want to see a couple of working examples of how the function might be used, then I'll be able to work it out for myself.

2

There are 2 best solutions below

1
On BEST ANSWER

Here is a quick example. Hope it helps.

    NSSet *set = [NSSet setWithObjects:@"1",@"2",@"3",@"4",@"5",nil];

    NSLog(@"%@",set); // Output (3,1,4,2,5) ... all objects

    NSSet *o = [set objectsPassingTest:^(id obj,BOOL *stop){
        NSString *so = (NSString *)obj;
        int intval = [so intValue];
        // accept objects less or equal to two
        BOOL r = (intval <= 2);
        return r;
    }];

    NSLog(@"%@",o); // Output (1,2) only objects smaller or equal  to 2
0
On

I never used blocks. But I guess this is how it works.

NSSet *set = [NSSet setWithObjects:@"FooBar", @"Foo", @"Bar", @"Baz", nil];

NSSet *fooSet = [set objectsPassingTest:^(id obj, BOOL *stop) {
    BOOL testResult = NO;
    NSString *objStr = (NSString *)obj;
    if ([objStr hasPrefix:@"Foo"]) {
        testResult = YES;
    }
    if ([objStr hasSuffix:@"Bar"]) {
        testResult = YES;
    }
    return testResult;
}];

This will create a set with @"FooBar", @"Foo" and @"Bar", because only those pass the test (ie return YES).