답변:
객체가 클래스 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
}
class_getNameover 를 사용하면 어떤 이점이 NSStringFromClass있습니까? 없는 경우이 답변을 조정해야합니다.
당신은 또한 사용할 수 있습니다
NSString *className = [[myObject class] description];
모든 NSObject에서
Apple 문서에서 isKindOfClass의 의미
클래스 클러스터로 표시되는 객체에서이 방법을 사용할 때는주의하십시오. 클래스 클러스터의 특성으로 인해 다시 얻는 객체가 항상 예상 한 유형이 아닐 수도 있습니다. 클래스 클러스터를 반환하는 메서드를 호출하면 메서드에서 반환 한 정확한 형식이 해당 개체로 수행 할 수있는 작업을 나타내는 가장 좋은 지표입니다. 예를 들어, 메소드가 NSArray 객체에 대한 포인터를 반환하는 경우 다음 코드와 같이이 메소드를 사용하여 배열이 변경 가능한지 확인하지 않아야합니다.
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
코드에서 이러한 구문을 사용하는 경우 실제로 수정해서는 안되는 객체를 수정하는 것이 좋습니다. 그러면 객체가 변경되지 않은 다른 코드에 문제가 발생할 수 있습니다.
-isKindOfClass:및 -isMemberOfClass:클래스 클러스터 내에서 객체를 식별하는 데 사용되어서는 안된다.
클래스의 이름을 얻으려면 다음을 호출하십시오.
id yourObject= [AnotherClass returningObject];
NSString *className=[yourObject className];
NSLog(@"Class name is : %@",className);