Используйте NSPredicate для фильтрации по индексу - PullRequest
0 голосов
/ 26 октября 2018

По сути, я хочу сделать следующее:

NSArray *objectsAtIndex1 = @[[@[@"Foo", @"Bar"] objectAtIndex:1]];

, но с использованием NSPredicate вместо этого, чтобы это выглядело примерно так (однако это не работает):

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF[1] != null"]
NSArray *objectsAtIndex1 = [@[@"Foo", @"Bar"] filteredArrayUsingPredicate:predicate]

И, конечно, @ "Foo" и @ "Bar" в действительности являются неизвестными значениями (и даже могут быть словарями или числами). Возможно ли этого добиться?

1 Ответ

0 голосов
/ 26 октября 2018

Я решил это с помощью метода predicateWithBlock: на NSPredicate, например, так:

NSArray *fooBarArray = @[@"Foo", @"Bar"];
NSUInteger index = 1;
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    return [fooBarArray indexOfObject:evaluatedObject] == index;
}];
NSArray *objectsAtIndex1 = [fooBarArray filteredArrayUsingPredicate:predicate];

Одно предостережение заключается в том, что объекты в массиве fooBar должны быть уникальными, чтобы это работало, чтоне идеален.

...