Например, функция NSSet objectsPassingTest?
Я собираюсь сходить с ума. По какой-то причине я не могу найти ни одного, полный пример использования функции objectsPassingTest: NSSet (cocoa). Прежде чем кто-нибудь укажет меня на страницы о блоках, я их видел. Приведенный пример показывает, как объявить функцию, а не блок, который ее использует, и когда я попробовал свой пример с моим собственным кодом, это не сработало. Я просто хочу увидеть пару рабочих примеров того, как функция может быть использована, тогда я смогу самостоятельно ее обработать.
Ответы
Ответ 1
Вот краткий пример. Надеюсь, что это поможет.
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
Ответ 2
Я никогда не использовал блоки. Но я думаю, что так оно и работает.
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).