繁体   English   中英

将值从字典转换为NSNumber

[英]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"]];

这行得通,但似乎困扰很长,而且价格也不便宜。 还有我没有考虑过的另一种方法吗?

假设您始终将数字读取为整数,那么我假设您的字符串仅包含整数。

在这种情况下,您可以使用在NSNumberNSString中都实现的通用方法: integerValue 这将使您免于调用isKindOfClass:和繁重的分支。 就像1989年一样的面向对象编程!

像这样:

NSNumber *myNumber = @([myStringOrNumber integerValue]);

此操作的成本是将将已经是数字的对象转换为其他(但等效)数字对象* ,因此请考虑到这一点。 性能/简单性之间的折衷。

*除了对NSNumber类进行了一些优化之外,因此对于覆盖的每个值,都使用单个实例实现了最低值整数。 在这种情况下,上面的代码行绕过integerValueNSNumber构造函数将产生完全相同的对象。

NSNumber和NSString都响应-intValue方法,该方法返回一个int值。 因此,您可以执行以下操作:

NSNumber *myNumber = @([[dictionary valueForKeyPath:@"key.path"] intValue]); // using modern Objective-C syntax

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM