我知道在Objective-C中我们可以使用:
+ (Class)class;
然而,如果我想获得基本类型的类类型,如int
或short
,我该怎么做?
在Objective C中存在类似的东西吗?
在Java中,我们可以通过以下方式获得原语的类类型:如。Class<?> classType = short.class;
在Objective C中存在类似的东西吗?
NSString* numStr = @"124";
现在我想动态地调用一个方法(方法名只有在运行时才知道)。该方法可以接受任何类型的数字输入,如short
、int
、long
、double
或NSNumber
。
。
(void) doSomethingWithInt: (int) intVal;
(void) doSomethingWithShort: (short) shortVal;
(void) doSomethingWithDouble: (double) doubleVal;
(void) doSomethingWithNSNum: (NSNumber) NSNumVal;
我相信NSInvocation
可以用于反射调用方法。但是,在NSInvocation
,对象中设置参数时,我如何将字符串正确地转换为所有不同的类型?
原语不是类,因此您不能像这样获得它们的类型。然而,@encode
(参见NSHipster博客条目)可能会对你有所帮助,这取决于你想做什么。
在Java中,原语也不是类,但通过自动装箱,在必要时使用相应的包装类。Objective-C不会为你做这些神奇的事情。
解决方法:假设函数只接受基本数值或NSNumber,我们可以使用注释中描述的@encoding来识别正确的参数类型。没有其他方法可以反射地识别确切的方法签名。
根据定义,原语没有类,但是您可以使用__typeof__
关键字来获取原语的类型,甚至使用它来声明具有该类型的另一个变量:
int x = 10;
__typeof__(x) y = 12;
但是,如果我想获得基本类型(如int)的类类型或者简而言之,我该怎么做?
int
, char
, float
等不是一个类。
但是你可以通过objective-C运行时得到它的类型