測試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