Objective-C에서 객체가 특정 클래스의 인스턴스인지 어떻게 테스트합니까? 객체 a가 클래스 b 또는 클래스 c의 인스턴스인지 확인하고 싶습니다. 어떻게 수행합니까?
답변
객체가 클래스 a의 인스턴스인지 테스트하려면 :
[yourObject isKindOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of
// given class or an instance of any class that inherits from that class.
또는
[yourObject isMemberOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of a
// given class.
객체의 클래스 이름을 얻으려면 NSStringFromClass
함수 를 사용할 수 있습니다 .
NSString *className = NSStringFromClass([yourObject class]);
objective-c 런타임 API의 c-function :
#import <objc/runtime.h>
/* ... */
const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);
편집 : 스위프트에서
if touch.view is UIPickerView {
// touch.view is of type UIPickerView
}
답변
당신은 또한 사용할 수 있습니다
NSString *className = [[myObject class] description];
모든 NSObject에서
답변
Apple 문서에서 isKindOfClass의 의미
클래스 클러스터로 표시되는 객체에서이 방법을 사용할 때는주의하십시오. 클래스 클러스터의 특성으로 인해 다시 얻는 객체가 항상 예상 한 유형이 아닐 수도 있습니다. 클래스 클러스터를 반환하는 메서드를 호출하면 메서드에서 반환 한 정확한 형식이 해당 개체로 수행 할 수있는 작업을 나타내는 가장 좋은 지표입니다. 예를 들어, 메소드가 NSArray 객체에 대한 포인터를 반환하는 경우 다음 코드와 같이이 메소드를 사용하여 배열이 변경 가능한지 확인하지 않아야합니다.
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
코드에서 이러한 구문을 사용하는 경우 실제로 수정해서는 안되는 객체를 수정하는 것이 좋습니다. 그러면 객체가 변경되지 않은 다른 코드에 문제가 발생할 수 있습니다.
답변
특정 수업을 확인하려면 다음을 사용할 수 있습니다
if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}