인스턴스에서 클래스 이름 얻기


142

다음과 같은 문제가 있습니다. 클래스의 인스턴스가 전달되었고이 인스턴스의 클래스 이름을 알고 싶습니다. 이것을 얻는 방법?


아마도 당신의 질문을 바꾸거나 질문과 일치하는 대답을 받아들이겠습니까?
재스퍼 블루스

@ JasperBlues : 완료, 이것이 얼마나 인기가 있는지 몰랐습니다!
Robin

답변:


396

NSStringFromClass([instance class]) 트릭을해야합니다.


33
Google 직원이 필요를 예상하지 않고 답변을 얻을 수 있도록 질문에 답변했습니다.
Gleno

2
에 기억 #import <objc/objc-runtime.h>인스턴스에 클래스를 호출 할 수합니다.
JP Illanes

28

객체를 테스트하여 특정 클래스의 유형인지 확인하십시오.

BOOL test = [self isKindOfClass:[SomeClass class]];

18

수업 자체에서

-(NSString *) className
{
    return NSStringFromClass([self class]);
}

2
분노를 불러 일으키고 싶지는 않지만, 이것은 프로필에서 두 번째 iOS 관련 답변이었습니다. 구현 내에서 인스턴스를 "자체"라고 할 수 있다는 것만 추가하는 것 같습니다. 당신은 이것을 3 살짜리 받아 들여진 대답에 실질적으로 추가하는 것으로 방어 하시겠습니까?
danh

@ danh 당신이 나를 사냥하는 참조하십시오. 잘 됐네요!
Katedral Pillon

죄송합니다. 방금 클릭 한 내용에 대해 토론했습니다. 부드러운 립을 원했지만이 반면이없는 설정에서 성질이 매우 빨리 뜨거워지는 것을 알고 있습니다. 그것에 대해 잘 알고 주셔서 감사합니다. (실제로 캡슐화를 연습하면 +1).
danh

2
이것은 문제를 제외하고는 대답에 아무것도 추가하지 않습니다.
Nikolai Ruhe

1
이것을 클래스 메소드로 만들어야합니다
Bhumit Muchhadia

2

카테고리를 추가하십시오.

NSObject+Extensions.h
- (NSString *)className;

NSObject+Extensions.m
- (NSString *)className {
    return NSStringFromClass(self.class);
}

그런 다음 다음 코드를 사용하십시오.

NSString *className = [[SomeObject new] className];

또는:

NSString *className = SomeObject.new.className;

어디서나 사용하려면 YourProject.pch 파일에 범주를 추가하십시오.


Swift 클래스에서 호출되면 네임 스페이스가 지정된 클래스 이름이 반환됩니다.
Alper

1

당신은 또한 사용할 수 있습니다 [[self class] description]


1

OBJC :

NSStringFromClass([instance class])

빠른

인스턴스에서 :

String(describing: YourType.self)

유형에서 :

String(describing: self)

0

Swift에서 클래스 이름을 얻는 방법을 찾고 있다면 reflect를 사용하여 객체에 대한 정보를 얻을 수 있습니다.

let tokens = split(reflect(self).summary, { $0 == "." })
if let typeName = tokens.last {
    println(typeName)
}

또는 그냥self.dynamicType
jbg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.