Objective-C中基元的类类型

时间:2014-05-09 07:34:11

标签: objective-c reflection types primitive

我知道在Objective-C中我们可以使用以下方法获取对象的类类型:

+ (Class)class;

但是,如果我想获取原始类型的类类型,例如intshort,我该怎么做?

Objective C中是否存在类似内容?

在Java中,我们可以通过以下方式获取基元的类类型: 例如。     Class<?> classType = short.class;

Objective C中是否存在类似内容?

NSString* numStr = @"124";

现在我想动态调用一个方法(方法名称仅在运行时已知)。 该方法可以采用任何类型的数字输入,例如shortintlongdoubleNSNumber

E.g。

(void) doSomethingWithInt: (int) intVal;
(void) doSomethingWithShort: (short) shortVal;
(void) doSomethingWithDouble: (double) doubleVal;
(void) doSomethingWithNSNum: (NSNumber) NSNumVal;

我相信NSInvocation可以用来反射性地调用方法。但是在NSInvocation中设置参数时,对象如何才能正确地将字符串转换为所有不同的类型?

3 个答案:

答案 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这样的基本类型的类类型   或者我该如何做?

intcharfloat等不属于此类。

但是,您可以通过objective-C运行时获取其类型。