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. 배열에 객체가 포함되어 있는지 확인하는 더 나은 방법은 무엇입니까?
- 2. NSString 인스턴스가 NSArray에 포함되어 있는지 확인하십시오.
- 3. 컬렉션에 특정 유형의 인스턴스가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 4. Tpicture에 Jpeg가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 5. UITextField에 특정 문자가 포함되어 있는지 확인하는 방법
- 6. 객체가 특정 유형의 배열인지 확인하는 방법은 무엇입니까?
- 7. NSSet에 일종의 클래스의 객체가 포함되어 있는지 어떻게 확인합니까?
- 8. std :: vector에 특정 객체가 포함되어 있는지 확인 하시겠습니까?
- 9. jQuery 클래스 이름에 특정 값이 포함되어 있는지 확인하는 방법
- 10. 프롤로그 - 목록에 특정 요소가 포함되어 있는지 확인하는 방법?
- 11. 클래스의 객체가 있는지 찾는 방법
- 12. 클래스에 하위 클래스/유형이 포함되어 있는지 확인하는 방법은 무엇입니까?
- 13. iframe에 특정 문장이 있는지 확인하는 방법은 무엇입니까?
- 14. 특정 어셈블리가 있는지 확인하는 방법은 무엇입니까?
- 15. 특정 URL에 파일이 있는지 확인하는 방법은 무엇입니까?
- 16. 코어 데이터 NSSet에 특정 ID가있는 객체가 포함되어 있습니까?
- 17. 문자열에 숫자가 포함되어 있는지 감지하는 방법은 무엇입니까?
- 18. 페이지에 얼마나 많은 jQuery 객체가 있는지 확인하는 방법은 무엇입니까?
- 19. PHP에서 JSON 객체가 비어 있는지 확인하는 방법은 무엇입니까?
- 20. Java 클래스에 JUnit4 테스트가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 21. PHP : 문자열에 특수 문자가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 22. 문자열에 영문자 (A-Z)가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 23. 지도에 스칼라에 빈 문자열 값이 포함되어 있는지 확인하는 방법은 무엇입니까?
- 24. 파일에 일반 텍스트가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 25. bitArray에 true 또는 false 값이 포함되어 있는지 확인하는 방법은 무엇입니까?
- 26. ASP.NET 컨트롤 속성에 데이터 바인딩식이 포함되어 있는지 확인하는 방법은 무엇입니까?
- 27. php : 문자열에 나열된 키워드가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 28. 입력 텍스트 필드에 공백 만 포함되어 있는지 확인하는 방법은 무엇입니까?
- 29. 링크 문자열에 단어가 포함되어 있는지 확인하는 방법은 무엇입니까? (PHP)
- 30. NSMutableArray에 값 (null)이 포함되어 있는지 확인하는 방법은 무엇입니까?
변수를 지정하여 열거를 중지하는 것 외에 블록 기반 방법을 사용할 때의 이점은 무엇입니까? – futureelite7
-1 대신 NSNotFound를 사용합니다. – NSResponder
@NSResponder - 좋은 캐치 - 고마워요. – Abizern