Вы также можете напрямую сравнивать классы в своем предикате.
Но, вероятно, это не будет работать так, как вы ожидаете, если вы пытаетесь фильтровать объекты, принадлежащие к кластерам классов, или если у вас есть подклассы.
Например, NSDate
при создании экземпляра обычно __NSCFDate
, а NSString
может быть NSCFString
, как и другие конкретные частные классы.
Вероятно, лучше просто пройтись по набору самостоятельно и использовать -isKindOfClass:
в качестве теста.
ЕСЛИ вы действительно хотите использовать NSPredicate
, хотя вы можете сделать это. Например, это будет фильтровать массив для всех объектов, полученных из NSString
. Если вы хотите строгое членство в классе, вы можете заменить isKindOfClass:
на isMemberOfClass:
.
Любой селектор, который реализуют все объекты в коллекции, принимает один аргумент и возвращает BOOL
, должен работать.
NSArray *mixedArray = {...};
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"self isKindOfClass: %@",
[NSString class]];
NSLog(@"%@", [mixedArray filteredArrayUsingPredicate:predicate]);