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

Ich*_*aki 2 objective-c ios

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

var a = "imastring";
console.log(typeof(a));
// --> "string"
Run Code Online (Sandbox Code Playgroud)

我想在Objective-C中清理一些不是编译器指令的东西.

rad*_*ual 7

是的,您可以使用[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
Run Code Online (Sandbox Code Playgroud)

请记住,在以这种方式检查的大多数对象上看到__NSCF__NS前缀是很常见的.例如,在记录NSString的类类型时,您可能会看到__NSCFString__NSCFConstantString(它们都是NSString类型)作为结果.当我好奇地看到幕后的情况时,我只会使用这种方法,但我不倾向于在生产中使用这种类型的检查.

您可以查看使用isKindOfClass方法来测试对象是否是某种类型.

  • 提到`-isKindOfClass的道具:`; 不要对`class`进行身份比较,即使元类是唯一的 - 也不能正确地允许子类,类集群的概念意味着通常在Objective-C中你正在处理一个子类,即使你没有实现它. (2认同)