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. ファイルにルビの特定の行が含まれているかどうかをチェックする方法
- 3. 特定のチェックボックスをチェックする方法はチェックされているかどうかチェックされていない
- 4. JSONオブジェクト配列に定義された値が含まれているかどうかをチェックする方法
- 5. オブジェクトがNSArrayまたはNSDictionaryであるかどうかをチェック
- 6. Javaクラスに特定のメソッドがあるかどうかをチェックする方法?
- 7. クラスの特定のインスタンスがjavaで実行されているかどうかをチェックする方法は?
- 8. Jsoup - Elementが特定のクラスのものかどうかをチェックする方法?
- 9. オブジェクトが特定のタイプであるかどうかをチェックする方法
- 10. ノードがDojoに特定のクラスを持っているかどうかをチェックする方法は?
- 11. オブジェクトに値が含まれているかどうかをチェックする方法は?
- 12. チェックボックスが特定の行でチェックされているかどうかをチェックする方法は?
- 13. ListにStruts2の特定の要素が含まれているかどうかを確認する方法は?
- 14. PHP/PDO - URLに特定のドメインのリストが含まれているかどうかをチェックします。
- 15. divに特定のクラスの別のdivが含まれているかどうかを確認しますか?
- 16. 文字列が特定のパターンに含まれているかどうかを確認する方法は?
- 17. WinList()に特定のタイトルが含まれているかどうかをチェックします。
- 18. 変数にタイプまたはタイプのリストが含まれているかどうかをチェックする方法は?
- 19. Objective-Cでは、プロトコルに特定のメソッドがプログラム的に含まれているかどうかをチェックする方法はありますか?
- 20. 親にChildNodesが含まれているかどうかをチェック
- 21. チェックする方法文字列の配列には特定の文字列が含まれていますか?
- 22. 要素に特定のスタイルが設定されているかどうかをチェックする方法 - Javascript/EXTJS
- 23. OWLDataRangeオブジェクトに指定された値が含まれているかどうかを確認する方法は?
- 24. オブジェクトがtypescriptで定義されていないかどうかをチェックする方法はありますか?
- 25. Javascriptが:ページは、特定のdivが含まれているかどうかをチェックし
- 26. 特定のフィールドにDjangoのエラーが含まれているかどうかを確認する方法
- 27. 三角形に特定の点が含まれているかどうかを調べる方法は?
- 28. オブジェクトの配列に指定された文字列が含まれているかどうかをチェック
- 29. リストからのファイルにmakefileに何かが含まれているかどうかをチェックする方法?
- 30. .Attrを持つ要素に特定のクラスがあるかどうかをチェックする方法は?
変数を指定して列挙を停止することを除けば、ブロックベースの方法を使用する利点は何ですか? – futureelite7
-1の代わりにNSNotFoundを使用します。 – NSResponder
@NSResponder - 良いキャッチ - ありがとう。 – Abizern