测试NSArray是否包含特定类型的对象的最佳方法是什么? containsObject:
似乎测试平等,而我正在寻找isKindOfClass:
平等检查。如何检查NSArray是否包含特定类的对象?
14
A
回答
23
你可以使用基于块枚举做到这一点。
// This will eventually contain the index of the object.
// Initialize it to NSNotFound so you can check the results after the block has run.
__block NSInteger foundIndex = NSNotFound;
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[MyClass class]]) {
foundIndex = idx;
// stop the enumeration
*stop = YES;
}
}];
if (foundIndex != NSNotFound) {
// You've found the first object of that class in the array
}
如果你有这种阵列中类的多个对象,你必须调整的例子有点,但是这应该给你的,你可以做些什么的想法。
这比快速枚举的好处是它允许您也返回对象的索引。另外,如果您使用enumerateObjectsWithOptions:usingBlock:
,则可以设置选项以便同时搜索,以便免费获得线程枚举,或者选择是否反向搜索数组。
基于块的API更加灵活。虽然它们看起来新颖复杂,但一旦开始使用它们,它们很容易拾起 - 然后您就开始看到在各处使用它们的机会。
7
你可以通过阵列使用快速列举循环并检查类:
BOOL containsClass = NO;
for (id object in array) {
if ([object isKindOfClass:[MyClass class]]) {
containsClass = YES;
break;
}
}
8
您可以使用NSPredicate执行此操作。
NSPredicate *p = [NSPredicate predicateWithFormat:@"self isKindOfClass: %@",
[NSNumber class]];
NSArray *filtered = [identifiers filteredArrayUsingPredicate:p];
NSAssert(filtered.count == identifiers.count,
@"Identifiers can only contain NSNumbers.");
相关问题
- 1. 检查NSArray是否包含具有特定属性的对象
- 2. 需要检查NSArray对象是否包含特定的文本。
- 3. 如何检查NSArray是否包含特定索引处的任何对象?
- 4. PHPUnit - 检查数组是否包含特定类型的对象
- 5. xcode检查一个NSArray是否存在并包含对象?
- 6. 检查ArrayList是否包含特定的JSON对象
- 7. 如何检查对象的类是否在Dart中包含mixin?
- 8. 如何检查NSSet是否包含某种类的对象?
- 9. 如何检查对象的ArrayList是否包含我的对象?
- 10. 如何检查会话对象是否包含任何对象?
- 11. 如何检查对象是否是特定类的实例?
- 12. 如何检查对象是否包含对象集合
- 13. 如何检查会话对象是否包含特定的键/值条目
- 14. 检查对象列表是否包含具有特定属性值的对象
- 15. 检查JavaScript对象是否包含X?
- 16. 检查java arraylist是否包含对象
- 17. 检查HashSet/HashMap是否包含对象
- 18. Rspec:检查数组是否包含包含属性的对象
- 19. 如何检查List是否包含Struts2中的特定元素?
- 20. 如何检查快照是否包含Firebase中的特定值?
- 21. wordpress:如何检查slu contains是否包含特定的单词?
- 22. 我如何检查数组是否包含特定的键php
- 23. 如何检查标签是否包含特定的字符串?
- 24. 如何检查索引是否包含SQLite中的特定列
- 25. 如何检查对象是否包含使用Jasmine的项目
- 26. 检查是否对象的列表中包含有一个特定的值
- 27. 如何查找元素是否包含特定的类?
- 28. 如何检查NSArray中是否存在特定的NSString?
- 29. 检查隐式类型变量是否包含特定值
- 30. 如何检查数组是否包含特定值?
除了能够指定变量来停止枚举之外,使用基于块的方法有什么优势? – futureelite7
我会使用NSNotFound而不是-1。 – NSResponder
@NSResponder - 良好的接收 - 谢谢。 – Abizern