任务:
从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"]
不应该有更简洁的方法来检索具有指定类名的对象..?
答案 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;
}