我要疯了。出于某种原因,我找不到一个完整的示例来说明如何使用 objectsPassingTest: NSSet (cocoa) 的函数。在有人将我指向有关块的页面之前,我已经看过那些。给出的示例仅显示了如何声明函数,而不是操作它的块,当我用自己的代码尝试他们的示例时,它不起作用。我只想看几个有关如何使用该功能的工作示例,然后我就可以自己解决了。
问问题
11158 次
2 回答
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
于 2011-03-01T08:43:57.080 回答
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)。
于 2011-03-01T08:44:12.853 回答