2015-08-14 69 views
5

說我有NSArray *x = @[@1, @2, @3, @4];Objective C中Swift的.map的等價物?

現在說我要像@[@2, @4, @6, @8]

在老好人斯威夫特一個數組,我可以這樣做:

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

誰能告訴我怎麼可以在目標做到這一點-C沒有做 -

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

+1

http://www.openradar.me/radar?id=5364414152704000(以及我的舊版請求的副本)。今天Cocoa沒有地圖方法。 –

回答

3

NSArray沒有map方法。它有一個enumerateObjectsUsingBlock:方法(和相關的)做類似的事情;它們不會自動將對象轉換爲另一個對象並返回另一個數組,但您可以輕鬆地手動完成該操作。但是,它們與你的例子並不完全相同。

我寫了一個名爲collections庫,增加了一個圖方法(和其他面向集合的方法)來NSArrayNSDictionary,並NSSet,雖然。

1

我不一定會推薦這個,但你可以利用類別和鍵值編碼做一些時髦的東西。例如:

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

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

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

通常,對於可被表示爲到物體,-valueForKey[Path]:充當的map()原始形式的性質的鍵或鍵路徑的任何操作。

+0

這非常整齊,實際上完成了OP在我看來要的東西。感謝那。 –

相關問題