我知道在Objective-C中我们可以使用以下方法获取对象的类类型:
+ (Class)class;
但是,如果我想获取原始类型的类类型,例如int
或short
,我该怎么做?
Objective C中是否存在类似内容?
在Java中,我们可以通过以下方式获取基元的类类型:
例如。
Class<?> classType = short.class;
Objective C中是否存在类似内容?
NSString* numStr = @"124";
现在我想动态调用一个方法(方法名称仅在运行时已知)。
该方法可以采用任何类型的数字输入,例如short
,int
,long
,double
或NSNumber
。
E.g。
(void) doSomethingWithInt: (int) intVal;
(void) doSomethingWithShort: (short) shortVal;
(void) doSomethingWithDouble: (double) doubleVal;
(void) doSomethingWithNSNum: (NSNumber) NSNumVal;
我相信NSInvocation
可以用来反射性地调用方法。但是在NSInvocation
中设置参数时,对象如何才能正确地将字符串转换为所有不同的类型?
答案 0 :(得分:2)
原语不是类,因此你不能得到这样的类型。但是,@encode
(另请参阅NSHipster blog entry)可能会对您有所帮助,具体取决于您的目标。
在Java中,原语也不是类,但是通过autoboxing,必要时会使用相应的包装类。 Objective-C并没有为你做这个魔术。
解决用例: 假设函数只采用原始数值或NSNumber,我们可以使用comment中描述的@encoding识别正确的参数类型。 没有其他方法可以反射性地识别确切的方法签名。
答案 1 :(得分:1)
根据定义,原语不具有类,但您可以使用__typeof__
keyword来获取基元的类型,甚至使用它来声明具有该类型的另一个变量:
int x = 10;
__typeof__(x) y = 12;
答案 2 :(得分:0)
但是,如果我想获得像int这样的基本类型的类类型 或者我该如何做?
int
,char
,float
等不属于此类。
但是,您可以通过objective-C运行时获取其类型。