我使用下面的代码来获取数字运行时间类
NSDecimalNumber* decimalNumber;
if ([paymentOrderDetail[@"Total"] class]==[NSNumber class]) {
decimalNumber = [NSDecimalNumber decimalNumberWithString:[paymentOrderDetail[@"Total"] stringValue]];
}else{
decimalNumber = [NSDecimalNumber decimalNumberWithString:paymentOrderDetail[@"Total"]];
}
如果条件总是失败,即使总数是一个数字不是字符串,当我打印总类时它给出“__NSCFNumber”
但我无法将其与“__NSCFNumber”
进行比较有什么办法可以让我知道整个对象的类类型
答案 0 :(得分:6)
NSNumber
是一个集群类,可以封装不同数据类型的不同表示形式。您应该使用[obj isKindOfClass:[NSNumber class]]
方法来检查对象的类型。
您可以在此处详细了解群集类:https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaEncyclopedia/ClassClusters/ClassClusters.html
答案 1 :(得分:0)
class
方法仅在实例属于同一类时才有效。即使你有一个从超类扩展的子类,它也不会起作用。在这种情况下,使用isKindOfClass
方法。
E.g。假设您有以下类的方案。
Superclass: Vehicle
Subclass: Car, Van, Bus
Car *c = [[Car alloc] init];
if([c class] == [Vehicle class]) // This will **Fail**
if([c isKindOfClass:[Vehicle class]]) //This will **Succeed**
现在,采用以下场景比较两个Car对象。
Car c2 = [[Car alloc] init];
if([c class] == [c2 class]) // This will now **Succeed**
if([c isKindOfClass:[c2 class]]) //This will also **Succeed**