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?


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.


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]];

18

De dentro da própria classe

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

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.


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


1

OBJC:

NSStringFromClass([instance class])

RÁPIDO

Da instância:

String(describing: YourType.self)

Do tipo:

String(describing: self)

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)
}

ou apenasself.dynamicType
jbg
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.