目标C中Swift的.map的等价物?

时间:2015-08-14 00:13:04

标签: objective-c swift dictionary

说我有NSArray *x = @[@1, @2, @3, @4];

现在说我想要一个像@[@2, @4, @6, @8]

这样的数组

在好的斯威夫特,我可以做:

xDoubled = x.map({($0) * 2})

有人可以告诉我如何在Objective-C中做到这一点而不做 -

NSMutableArray *xDoubled = [NSMutableArray new];
for (NSInteger xVal in x) {
    [xDoubled addObject:xVal * 2];
}

2 个答案:

答案 0 :(得分:3)

NSArray没有map方法。它有一个enumerateObjectsUsingBlock:方法(和相关的方法)做类似的事情;它们不会自动将对象转换为另一个对象并返回另一个数组,但您可以轻松地手动完成。但是,它们与你的例子并没有太大的不同。

我写了一个名为collections的库,它将地图方法(以及其他面向集合的方法)添加到NSArrayNSDictionaryNSSet

答案 1 :(得分:1)

我不一定推荐这个,但你可以利用类别和键值编码做一些时髦的东西。例如:

@interface NSNumber (DoubledValue)
- (NSNumber*) doubledValue;
@end

@implementation NSNumber (DoubledValue)
- (NSNumber*) doubledValue
{
    return @([self doubleValue] * 2);
}
@end

xDoubled = [x valueForKey:@"doubledValue"];

通常,对于可以表示为对象属性的键或键路径的任何操作,-valueForKey[Path]:充当map()的原始形式。

相关问题