Objective-C中的typeof()等价物是什么?

时间:2014-09-12 00:07:57

标签: ios objective-c

有没有快速的方法在Objective-C中使用某种typeof()等价物?在Javascript中我可以输入:

var a = "imastring";
console.log(typeof(a));
// --> "string"

我想在Objective-C中使用一些不是编译器指令的东西。

2 个答案:

答案 0 :(得分:6)

是的,您可以使用[object class]方法:

NSArray *a = @[@"a", @"b"];
NSLog(@"NSArray = %@", [a class]);
// NSArray = __NSArrayI

NSMutableArray *b = [[NSMutableArray alloc] initWithArray:a];
NSLog(@"NSMutableArray = %@", [b class]);
// NSMutableArray = __NSArrayM

NSString *c = @"imastring";
NSLog(@"NSString = %@", [c class]);
// NSString = __NSCFConstantString

NSNumber *d = [[NSNumber alloc] initWithInteger:5];
NSLog(@"NSNumber = %@", [d class]);
// NSNumber = __NSCFNumber

请注意,以这种方式检查的大多数对象上都会看到 __ NSCF __ NS 前缀。例如,在记录NSString的类类型时,您可能会看到 __ NSCFString __ NSCFConstantString (它们都是NSString类型)作为结果。当我好奇地看到幕后的情况时,我才会使用这种方法,但我不倾向于在生产中使用这种类型的检查。

您可以使用isKindOfClass方法来测试对象是否属于某种类型。

答案 1 :(得分:1)

您可以使用class的{​​{1}}方法。