NSArray.如何实现Map函数



在iOS中,我想实现NSArray的映射函数。这是一个应用于数组中每个元素的函数。实现这一点的最佳方式是什么?

谢谢,
Doug

您正在寻找apply,因为映射应该返回一个带有转换值的新数组。

但是,您可以通过创建自定义类别,使用所需的方法来增强NSArray。这里有两个例子-应用和映射:

@implementation NSArray (CMMap)
- (NSArray *) map:(id(^)(id obj))block {
    NSMutableArray *a = @[].mutableCopy;
    for (id o in self) {
        id on = block(o);
        if (!on) {
            NSLog(@"NSArray::map() - object returned by block is nil!");
            abort();
        }
        [a addObject: on];
    }
    return [NSArray arrayWithArray: a];
}
- (void) apply:(void(^)(id obj))block {
    for (id o in self) {
        block(o);
    }
}
@end

您可以使用NSArrayenumerateObjectsUsingBlock:函数。

[myArray enumerateObjectsUsingBlock:^(id x, NSUInteger index, BOOL *stop) {
    // Body of the function
}];

如果您使用的是Objective-C,您可以简单地使用以下方法:

- (void)makeObjectsPerformSelector:(SEL)aSelector;
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(nullable id)argument;

例如:

[array makeObjectsPerformSelector:@selector(doSomething)];

相关内容

  • 没有找到相关文章

最新更新