10

在 iOS 中,我想为 NSArray 实现地图功能。这是一个应用于数组的每个元素的函数。实现这一点的最佳方法是什么?

谢谢,
道格

4

3 回答 3

6

您正在寻找 apply ,因为 map 应该返回一个包含转换后值的新数组。

但是,您可以通过创建自定义类别来使用您寻找的方法来扩充 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
于 2013-08-30T09:57:13.877 回答
5

您可以使用enumerateObjectsUsingBlock:的功能NSArray

[myArray enumerateObjectsUsingBlock:^(id x, NSUInteger index, BOOL *stop) {
    // Body of the function
}];
于 2012-04-05T14:06:32.840 回答
0

如果你使用的是 Objective-C,你可以简单地使用这些方法:

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

例如:

[array makeObjectsPerformSelector:@selector(doSomething)];
于 2017-01-30T19:36:09.697 回答