将NSStrings的NSArray转换为NSNumber的更好方法

acq*_*sce 2 iphone objective-c

请考虑以下代码

NSString *param_string @"1:3:6:10:15:22:28:30";
NSArray *params = [param_string componentsSeparatedByString:@":"];

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterNoStyle];

NSMutableArray *convertedArray = [[NSMutableArray alloc] initWithCapacity:[params count]];

for(int i = 0; i < [params count]; i++){
    [convertedArray insertObject:[formatter numberFromString:[params objectAtIndex:i] atIndex:i]];
}
Run Code Online (Sandbox Code Playgroud)

有没有更好,更有效的方法来实现这一目标?最初的param_string在实践中可能会更长,但我不希望params数组中有超过200个元素.

谢谢

Jer*_*myP 7

这个怎么样.

将类别添加到NSString

@interface NSString(MyConverter)

-(NSDecimalNumber*) decimalNumberValue;

@end

@implementation NSString(MyConverter)

-(NSDecimalNumber*) decimalNumberValue
{
    return [NSDecimalNumber decimalNumberWithString: self];
}

@end
Run Code Online (Sandbox Code Playgroud)

现在你可以做到这一点

NSString *param_string @"1:3:6:10:15:22:28:30";
NSArray *params = [param_string componentsSeparatedByString:@":"];

NSArray* decimalNumbers = [params valueForKey: @"decimalNumberValue"];
Run Code Online (Sandbox Code Playgroud)

显然,如果你想要一个除NSDecimalNumber之外的其他对象,只需相应地改变你的类别.该方法只需返回一个可以放入数组的对象.