[英]converting value from dictionary to NSNumber
我有一个NSDictionary对象,其中包含从某些JSON对象转换而来的数据。
我的问题是一些数字存储为字符串,而另一些数字存储为整数。 即在NSDictionary中,数字可以是NSString或NSNumber类型。 不知何故,我必须转换数字,以便它们始终返回NSNumber。
到目前为止,这是我提出的解决方案:
#import "Convert.h"
@implementation Convert
+(NSNumber *)toInteger:(NSObject *)object {
if ([object isKindOfClass:[NSNumber class]]) {
return (NSNumber *) object;
}
else if ([object isKindOfClass:[NSString class]]) {
// Create number formatter
NSNumberFormatter *formatInt = [[NSNumberFormatter alloc] init];
[formatInt setNumberStyle:NSNumberFormatterDecimalStyle];
// return formatted number
return [formatInt numberFromString:(NSString *) object];
}
else {
return 0;
}
}
@end
实际上:
NSNumber *myint;
myint = [Convert toInteger:[dict valueForKeyPath:@"myobj.numberAsString"]];
myint = [Convert toInteger:[dict valueForKeyPath:@"myobj.numberAsInteger"]];
这行得通,但似乎困扰很长,而且价格也不便宜。 还有我没有考虑过的另一种方法吗?
假设您始终将数字读取为整数,那么我假设您的字符串仅包含整数。
在这种情况下,您可以使用在NSNumber
和NSString
中都实现的通用方法: integerValue
。 这将使您免于调用isKindOfClass:
和繁重的分支。 就像1989年一样的面向对象编程!
像这样:
NSNumber *myNumber = @([myStringOrNumber integerValue]);
此操作的成本是将将已经是数字的对象转换为其他(但等效)数字对象* ,因此请考虑到这一点。 性能/简单性之间的折衷。
*除了对NSNumber
类进行了一些优化之外,因此对于覆盖的每个值,都使用单个实例实现了最低值整数。 在这种情况下,上面的代码行绕过integerValue
和NSNumber
构造函数将产生完全相同的对象。
NSNumber和NSString都响应-intValue
方法,该方法返回一个int值。 因此,您可以执行以下操作:
NSNumber *myNumber = @([[dictionary valueForKeyPath:@"key.path"] intValue]); // using modern Objective-C syntax
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.