Ottenere il nome della classe da un'istanza


142

Ho il seguente problema: Ricevo un'istanza di una classe e desidero conoscere il nome della classe di questa istanza. Come si può ottenere?


Forse riformulare la tua domanda o accettare la risposta che corrisponde alla domanda?
Jasper Blues,

@JasperBlues: Fatto, non avevo nemmeno realizzato quanto fosse popolare!
Robin,

Risposte:


396

NSStringFromClass([instance class]) dovrebbe fare il trucco.


33
È stato votato per aver risposto alla domanda in modo che i googler possano ottenere una risposta, invece di anticipare la necessità.
Gleno,

2
Ricorda di #import <objc/objc-runtime.h>poter chiamare la classe su un'istanza.
JP Illanes,

28

se tutto ciò che vuoi fare è testare un oggetto per vedere se è un tipo di una determinata Classe

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

18

Dall'interno della classe stessa

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

2
Non voglio assolutamente suscitare la tua rabbia, ma questa è stata la seconda risposta relativa a iOS nel tuo profilo. Mi sembra di aggiungere solo che possiamo fare riferimento a un'istanza come "sé" all'interno della sua implementazione. Difenderesti questo come aggiunta sostanziale alla risposta accettata di tre anni?
danh,

@danh Vedo che mi stai dando la caccia. Buon per te!
Katedral Pillon,

Mi dispiace, ho appena cliccato su questo e ho discusso se dire qualcosa. Volevo solo fare delle costolature delicate, ma so che gli animi si surriscaldano abbastanza rapidamente in queste ambientazioni semi-senza volto. Grazie per essere di buon carattere a riguardo. (In effetti, +1 per praticare l'incapsulamento).
danh,

2
Questo non aggiunge nulla alla risposta tranne i problemi.
Nikolai Ruhe,

1
Dovrebbe renderlo un metodo di classe
Bhumit Muchhadia,

2

Aggiungi una categoria:

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

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

Quindi utilizzare il seguente codice:

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

o anche:

NSString *className = SomeObject.new.className;

Per usarlo ovunque aggiungi la categoria al file YourProject.pch.


Se chiamato su una classe Swift, questo restituisce un nome classe classificato.
Alper il


1

objc:

NSStringFromClass([instance class])

SWIFT

Dall'istanza:

String(describing: YourType.self)

Dal tipo:

String(describing: self)

0

Se stai cercando come ottenere il nome di classe in Swift, puoi usare la modalità refl per ottenere informazioni sull'oggetto.

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

o semplicementeself.dynamicType
jbg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.