【问题标题】:How to find the type / class name of objects a NSArray has?如何找到 NSArray 具有的对象的类型/类名?
【发布时间】:2014-03-09 00:23:58
【问题描述】:

我知道如何通过在对象上使用 isKindOfClass 来查找数组中每个对象的类。就我而言,该数组将包含同一类的所有对象,我正在尝试查找类名。下面的描述将有助于更好地理解这个问题:

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

类名ClassA

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

类名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 来查找它的类?

【问题讨论】:

    标签: ios objective-c nsarray


    【解决方案1】:

    如果你确定数组中的所有对象都是数组中第一项的类型,那还不错。

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

    【讨论】:

    • 我如何获取空数组的类型
    【解决方案2】:

    如果打印是指日志,则可以使用:

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

    【讨论】:

    • [array firstObject] 会更安全,假设您只使用 iOS 7。
    • 刚刚阅读它,并更新了我的答案。我没有意识到这是一个功能,谢谢你的提示!
    • -firstObject 是在 iOS 4 中添加的,但直到 iOS 7 才公开。在旧操作系统上使用是安全的。
    【解决方案3】:

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

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

    【讨论】:

    • 另外,如果您知道每个 NSArray 仅包含来自特定类的对象,那么您不必遍历所有对象,您可以测试 firstObject
    • @MarceloGobetti - 如果没有直接获取课程的方法,我也想过这样做。
    【解决方案4】:

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

    typedef enum {
       ClassType1,
       classType2
    } MyEnumType;
    
    - (void)someMethod:(NSArray *)myObjects withType:(MyEnumType)objType;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      相关资源
      最近更新 更多