Objective-C中原语的类类型



我知道在Objective-C中我们可以使用:

+ (Class)class;

然而,如果我想获得基本类型的类类型,如intshort,我该怎么做?

在Objective C中存在类似的东西吗?

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

在Objective C中存在类似的东西吗?

NSString* numStr = @"124";

现在我想动态地调用一个方法(方法名只有在运行时才知道)。该方法可以接受任何类型的数字输入,如shortintlongdoubleNSNumber

(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运行时得到它的类型

相关内容

  • 没有找到相关文章

最新更新