通过指定类名从NSArray中检索对象

时间:2016-02-14 08:10:45

标签: objective-c cocoa nsarray nsobject

任务:

NSArray返回一个对象,该对象的名称作为参数提供给该函数。

现在我有这个功能:

+ (id)objectOfType:(NSString *)name fromArray:(NSArray *)array
{
   for (NSObject* instance in array)
   {
      if ([instance.className isEqualToString:name])
         return instance;
   }       
   return nil;
}

但是,考虑到我可以使用这个简单的方法调用NSArray

将一个对象数组转换为一个对象的类名数组
[array valueForKeyPath:@"className"] 

不应该有更简洁的方法来检索具有指定类名的对象..?

2 个答案:

答案 0 :(得分:2)

这是一个简洁的方法,使用NSPredicate和数组过滤。

+ (id)objectOfType:(NSString *)name fromArray:(NSArray *)array {
    return [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"class == %@", NSClassFromString(name)]].lastObject;
}

答案 1 :(得分:-1)

另一种方法是你可能拥有原始的对象数组。您可以将要检索的类型的对象传递给下面给出的方法:

* array是Objects的原始数组:

+ (id)objectOfType:(id)passingObject fromArray:(NSArray *)array
{
    for (id obj in array)
    {
        if ([obj isKindOfClass:[passingObject class]])
            return obj;
    }
    return nil;
}