在 iOS 中,我想为 NSArray 实现地图功能。这是一个应用于数组的每个元素的函数。实现这一点的最佳方法是什么?
谢谢,
道格
在 iOS 中,我想为 NSArray 实现地图功能。这是一个应用于数组的每个元素的函数。实现这一点的最佳方法是什么?
谢谢,
道格
您正在寻找 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
您可以使用enumerateObjectsUsingBlock:
的功能NSArray
。
[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)];