获取Objective-C中指定类的NSArray的所有对象

aki*_*don 1 objective-c nsarray

我有一个包含可能不同类的对象的数组,例如:

NSArray *multiClassArray = @[@"foo", @42, @"bar"];
Run Code Online (Sandbox Code Playgroud)

我想得到一个新数组,其中包含multiClassArray其类的所有对象,比如说NSString.

有没有比循环每个项更优雅的方法multiClassArray,检查它的类,并适当地将它存储在一个新的数组中?

aki*_*don 5

这可以使用NSArray实例方法完成:

  • - indexesOfObjectsPassingTest:
  • - objectsAtIndexes:

以下代码是如何创建包含原始数组的所有字符串对象的数组的示例.

NSArray *multiClassArray = @[@"foo", @42, @"bar"];

NSIndexSet *idxSetOfStrings = [multiClassArray indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return [obj isKindOfClass:[NSString class]];
}];

NSArray *arrayOfStrings = [multiClassArray objectsAtIndexes:idxSetOfStrings];
Run Code Online (Sandbox Code Playgroud)