NSSet的objectsPassingTest函数的例子好吗?

时间:2011-03-01 08:32:51

标签: iphone cocoa ipad nsset

我在这里疯了。由于某种原因,我找不到一个如何使用NSSet(cocoa)的objectsPassingTest:函数的完整示例。在有人指出我关于街区的网页之前,我已经看过了。给出的示例仅显示如何声明函数,而不是操作它的块,当我用自己的代码尝试它们的示例时它不起作用。我只是想看几个关于如何使用该函数的工作示例,然后我将能够为自己解决这个问题。

2 个答案:

答案 0 :(得分:30)

这是一个简单的例子。希望它有所帮助。

    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

答案 1 :(得分:4)

我从未使用过积木。但我想这就是它的工作原理。

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)。