나는 TableViewCell에서 파생됩니다. 인덱스 경로에 대한 테이블 뷰를 쿼리 할 때 UITableViewCell을 반환합니다. 이 객체가 내 사용자 정의 유형 "CustomCell"중 하나인지 어떻게 알 수 있습니까? 인스턴스의 클래스 ID를 사용하려고객관적인 C, 개체가 특정 클래스의 경우 쿼리하는 방법
객체 지향 설계에서 언제나
4
A
답변
3
if ([cell isKindOfClass:[CustomCell class]]) {
[(CustomCell*)cell customCellMethod];
}
2
if ([cell isKindOfClass:[CustomCell class]]) {
// ...
}
1
은, 코드 냄새와 플래그를 제기해야한다. 사용자 지정 셀을 사용하여 정확히 무엇을하려합니까? 아마도 누군가가 더 나은 접근법을 제안 할 수 있습니다.
아니요, 디자인을 분리하는 데 도움이되므로 클래스보다는 클래스 (Objective-C에서는 @protocol
)에 의존하는 것이 훨씬 더 좋은 디자인입니다. 필요한 API로 @protocol
을 정의하고 CustomCell
에서 해당 프로토콜을 구현하도록하십시오. 그런 다음 코드에서 다음을 테스트 할 수 있습니다.
if([cell conformsToProtocol:@protocol(MyCellProtocol)]) {
//...
}
클래스 ID 테스트가 아닌.
단일 방법 만 필요한 경우 [cell respondsToSelector:@selector(myMethod)]
을 사용할 수 있습니다.
0
여기 실제로 사용할 수있는 두 가지 방법이 있습니다. 당신이 원한 것은 isKindOfClass:
이지만, isMemberOfClass:
이라는 또 다른 방법이 있는데, 수신기가 하위 클래스의 인스턴스가 아니라 제공된 클래스의 인스턴스 인 경우에만 YES
을 반환합니다. DerivedClass
이 BaseClass
의 서브 클래스 인 경우 예를 들어
BOOL isKind = [aDerivedInstance isKindOfClass:[BaseClass class]]; // YES
BOOL isMember = [aDerivedInstance isMemberOfClass:[BaseClass class]]; // NO
관련 문제
- 1. 객관적인 C 단순 성공한 경우
- 2. 개체가 특정 형식인지 확인하는 방법
- 3. 객관적인 c 하위 클래스의 메서드를 재정의하는 것을 피하는 방법
- 4. 개체가 잠겨있는 경우 어떻게 찾습니까? C#
- 5. C#에서 특정 노드를 쿼리하는 XML
- 6. 객관적인 C 클래스를 암호화하는 방법
- 7. 객관적인 C 파일 조직
- 8. 객관적인 C에서 특정 요일을 얻는 방법?
- 9. 객관적인 C - 릴리스 문제
- 10. 쿼리하는 경우 wordpress에서 is_home을 결정하는 방법 범주?
- 11. 객관적인 c isKindOfClass missunderstanding?
- 12. 객관적인 C 기본 질문
- 13. 객관적인 C 디버깅
- 14. 객관적인 c 메모리 누수
- 15. C++에서 개체가 부모 클래스의 생성자에있는 Child 클래스의 인스턴스인지 어떻게 테스트 할 수 있습니까?
- 16. 객관적인 C SDK 4.0에서 수면을 수정하는 방법?
- 17. 객관적인 c 클래스에서 함수를 호출하는 방법
- 18. 객관적인 C에서 C++ 템플릿 클래스를 사용하는 방법
- 19. SPView 개체를 쿼리하는 방법
- 20. 객관적인 C 메모리 누수
- 21. WebSocket을하고 객관적인-C
- 22. 객관적인 c 연산자 의미
- 23. 객관적인 미래의 C?
- 24. 객관적인 c 루프
- 25. 객관적인 c 메모리 관리
- 26. 객관적인 C 메시지를 무시합니다.
- 27. 객관적인 C 이미지 처리
- 28. 객관적인 C 메모리 누수
- 29. C++에서 DB 테이블을 쿼리하는 방법
- 30. C++에서 하위 프로세스를 쿼리하는 방법
나는 유스 케이스는이 경우에 매우 분명하다 생각합니다. 특히 ObjectiveC 타이핑이 작동하는 방식. 당신은'UITableViewCell'의 다양한 서브 클래스의 셀로 채워진 테이블 뷰를 가지며,'[tableView cellForRowAtIndexPath : indexPath]'를 요구합니다. 그 테이블 뷰 메소드는 단지'UITableViewCell'의 인스턴스를 반환 할 것이고, 당신이 그 셀의 서브 클래스를 가지고 있는지를 알 수있는 유일한 방법은 그 클래스를 테스트하는 것입니다. 프로토콜을 만들 수도 있지만, 대부분의 사용자 정의 셀 메소드를 어쨌든 배치 할 것이므로 명백한 이점은 거의 없을 것입니다. –