如何找到NSArray具有的对象的类型/类名?

时间:2014-03-09 00:23:59

标签: ios objective-c nsarray

我知道如何在对象上使用isKindOfClass来查找数组中每个对象的类。在我的情况下,数组将具有相同类的所有对象,我试图找到类名。以下描述将有助于更好地理解这个问题:

我有2个自定义类和2个包含这些类对象的数组:

className ClassA

保存ClassA对象的数组NSArray *arrayA = [NSArray arrayWithObjects:a1, a2, a3, nil];

className ClassB

保存ClassB对象的数组NSArray *arrayB = [NSArray arrayWithObjects:b1, b2, b3, nil];

我的控制器ControllerA有一个接受NSArray作为输入的方法。

@implementation ControllerA

- (void)someMthod:(NSArray *)myArrayOfObjects
{
     // Print the custom class name whose objects are present inside the array.
}
@end

因此,当我使用arrayA作为输入数组调用此方法时,它应该打印ClassA而不迭代数组中的所有对象。当我通过传递arrayB作为输入来调用它时,它应该打印ClassB而不迭代数组中的所有对象。

数组中的所有对象都是ClassA或ClassB。它不会像[NSArray arrayWithObjects:a1, a2, b1, b2, nil];

这样的类具有对象的组合

有没有直接的方法来实现我正在寻找的东西而不是遍历数组的每个对象并在其上使用isKindOfClass来找到它的类?

4 个答案:

答案 0 :(得分:3)

如果您确定数组中的所有对象都是数组中第一个项目的类型,那么它就不那么糟了。

NSString *className = NSStringFromClass([[myArrayOfObjects firstObject] class]);

答案 1 :(得分:1)

如果通过打印表示日志,则可以使用:

 NSLog(@"%@", [[array firstObject] class]);

答案 2 :(得分:0)

不,真正找到集合中给定对象的类的唯一方法是在迭代它们时使用isKindOfClass

更新:假设你需要单独检查所有对象,但是如果每个数组都包含相同类型的对象,@ Jeffery Thomas的答案就是你想要的。

答案 3 :(得分:0)

[[myArrayOfObjects firstObject] class]响应是正确的,当然也很容易实现。但就我个人而言,我会这样解决:

typedef enum {
   ClassType1,
   classType2
} MyEnumType;

- (void)someMethod:(NSArray *)myObjects withType:(MyEnumType)objType;

如果是您自己的代码创建数组并将其传递给someMethod:,您可以轻松更改界面,以便您可以传递您正在使用的对象类型,而不必检查任何数组元件。