Пример функции NSSet objectsPassingTest, пожалуйста? - PullRequest
15 голосов
/ 01 марта 2011

Я схожу с ума здесь. По некоторым причинам я не могу найти ни одного полного примера того, как использовать objectsPassingTest: функцию NSSet (какао). Прежде чем кто-то указывает мне на страницы о блоках, я видел их. В приведенном примере показано только то, как объявлять функцию, а не блок, который ее использует, и когда я попробовал их пример со своим собственным кодом, это не сработало. Я просто хочу увидеть пару рабочих примеров того, как можно использовать эту функцию, и тогда я смогу решить ее для себя.

Ответы [ 2 ]

30 голосов
/ 01 марта 2011

Вот быстрый пример.Надеюсь, это поможет.

    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
4 голосов
/ 01 марта 2011

Я никогда не использовал блоки. Но я думаю, что это так.

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

Это создаст набор с @ "FooBar", @ "Foo" и @ "Bar", потому что только те, кто проходит тест (то есть возвращают YES).

...