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. Javaクラスに特定のメソッドがあるかどうかをチェックする方法?
- 4. クラスの特定のインスタンスがjavaで実行されているかどうかをチェックする方法は?
- 5. オブジェクトがNSArrayまたはNSDictionaryであるかどうかをチェック
- 6. Jsoup - Elementが特定のクラスのものかどうかをチェックする方法?
- 7. オブジェクトが特定のタイプであるかどうかをチェックする方法
- 8. オブジェクトに値が含まれているかどうかをチェックする方法は?
- 9. ListにStruts2の特定の要素が含まれているかどうかを確認する方法は?
- 10. divに特定のクラスの別のdivが含まれているかどうかを確認しますか?
- 11. チェックする方法文字列の配列には特定の文字列が含まれていますか?
- 12. 親にChildNodesが含まれているかどうかをチェック
- 13. Javascriptが:ページは、特定のdivが含まれているかどうかをチェックし
- 14. 三角形に特定の点が含まれているかどうかを調べる方法は?
- 15. UITextFieldに特定の文字が含まれているかどうかを確認する方法
- 16. 文字列に特定の形式が含まれているかどうかを確認する方法
- 17. TextViewに特定の文字列が含まれているかどうかを確認する方法
- 18. Jena - 特定のリソースがモデルに含まれているかどうかを確認する方法
- 19. 文字列に特定のものが含まれているかどうかをチェックするにはどうしたらいいですか?
- 20. jQuery入力テキストに特定のテキストが含まれているかどうかをチェック
- 21. Javaでは、コレクションに特定のクラスのインスタンスが含まれているかどうかを確認するにはどうすればよいですか?
- 22. 配列に特定のオブジェクトが含まれているかどうかを確認してください
- 23. オブジェクトに特定のメソッド/プロパティがあるかどうかをチェックする方法は?
- 24. 配列要素に改行のみが含まれているかどうかをチェックする方法は?
- 25. タプルにPythonの要素が含まれているかどうかをチェックする方法は?
- 26. Linq to SQL、特定のテーブル/クラスがDataContextのチェンジセットにあるかどうかをチェックする方法
- 27. リストに特定のタイプのオブジェクトが含まれているかどうかを確認するにはどうすればよいですか? C#
- 28. Haskell:リストに特定の "サブリスト"が含まれているかどうかテスト
- 29. 複数行TextBoxに文字列が含まれているかどうかをチェックする方法は?
- 30. コレクションにすべての一意のオブジェクトが含まれているかどうかを検証する方法
変数を指定して列挙を停止することを除けば、ブロックベースの方法を使用する利点は何ですか? – futureelite7
-1の代わりにNSNotFoundを使用します。 – NSResponder
@NSResponder - 良いキャッチ - ありがとう。 – Abizern