ios - 将值从字典转换为NSNumber

标签 ios objective-c type-conversion

我有一个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构造函数绕行后,上面显示的代码行将产生完全相同的对象。

关于ios - 将值从字典转换为NSNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17111661/

相关文章:

html - 删除 MFMailComposeViewController HTML 右边距?

ios - 在方法运行之前使用可达性检查连接

ios - 如何将平移手势从 UICollectionViewCell 传递给 UICollectionVIew?

java - Java 中的 "double, Double, HashSet"

java - 使用十进制将 int 转换为 BigDecimal - Java

javascript - 在 Cordova/Phonegap 下运行时,点击 contenteditable div 无法定位光标

ios - 如何在 swift 中将 popoverview 居中

ios - 在自定义框架中显示相机

objective-c - 从 CoreData 检索到的 TableView 上的图像

javascript - 如何将非字符串值传递给 Angular 指令?