Obtendo o nome da classe de uma instância

142

Eu tenho o seguinte problema: Recebo uma instância de uma classe aprovada e quero saber o nome da classe desta instância. Como conseguir isso?

Robin
fonte
Talvez reformule sua pergunta ou aceite a resposta que corresponde à pergunta?
Jasper azuis
@ JasperBlues: Feito, nem percebi o quão popular isso ficou!
Robin

Respostas:

396

NSStringFromClass([instance class]) deve fazer o truque.

CiNN
fonte
33
Promovido por responder à pergunta para que os googlers possam obter uma resposta, em vez de antecipar a necessidade.
Gleno
2
Lembre- #import <objc/objc-runtime.h>se de poder chamar a classe em uma instância.
JP Illanes
28

se tudo o que você quer fazer é testar um objeto para ver se é um tipo de determinada classe

BOOL test = [self isKindOfClass:[SomeClass class]];
kubi
fonte
18

De dentro da própria classe

-(NSString *) className
{
    return NSStringFromClass([self class]);
}
Katedral Pillon
fonte
2
Absolutamente não quero despertar sua raiva, mas essa foi a segunda resposta relacionada ao iOS no seu perfil. Parece-me acrescentar apenas que podemos nos referir a uma instância como "eu" de dentro de sua implementação. Você defenderia isso como um acréscimo substancial à resposta aceita de três anos de idade?
danh 17/09/14
@danh Vejo que você está me caçando. Bom para você!
Katedral Pillon
Desculpe, acabei de clicar neste e discuti sobre dizer algo. Só queria fazer algumas nervuras suaves, mas sei que os temperamentos esquentam muito rapidamente nessas configurações sem rosto. Obrigado por ter uma boa índole sobre isso. (De fato, +1 para praticar encapsulamento).
danh 17/09/14
2
Isso não acrescenta nada à resposta, exceto problemas.
Nikolai Ruhe
1
Deve fazer este método de classe um
Bhumit Muchhadia
2

Basta adicionar uma categoria:

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

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

Em seguida, use o seguinte código:

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

ou até:

NSString *className = SomeObject.new.className;

Para usá-lo em qualquer lugar, adicione a categoria ao arquivo YourProject.pch.

ealee
fonte
Se chamado em uma classe Swift, isso retorna um nome de classe com espaço para nome.
Alper
1

Você também pode usar [[self class] description]

Jeremie D
fonte
1

OBJC:

NSStringFromClass([instance class])

RÁPIDO

Da instância:

String(describing: YourType.self)

Do tipo:

String(describing: self)
Lal Krishna
fonte
0

Se você está procurando como obter o nome da classe no Swift, pode usar o reflect para obter informações sobre o objeto.

let tokens = split(reflect(self).summary, { $0 == "." })
if let typeName = tokens.last {
    println(typeName)
}
Roman Barzyczak
fonte
ou apenasself.dynamicType
jbg