2010-02-07 25 views
116

Mam następujący problem: Otrzymuję wystąpienie klasy przekazanej i chcę znać nazwę klasy tej instancji. Jak to zdobyć?Pobieranie nazwy klasy z instancji

+0

Być może przeredagować pytanie lub zaakceptować odpowiedź pasującą do pytania? –

+0

@JasperBlues: Zrobione, nawet nie zdawałem sobie sprawy, jak bardzo jest to popularne! – Robin

Odpowiedz

336

NSStringFromClass([instance class]) powinien załatwić sprawę.

+28

Wzwyższony o udzielenie odpowiedzi na pytanie, dzięki czemu użytkownicy Google mogą uzyskać odpowiedź, zamiast przewidywać taką potrzebę. – Gleno

+2

Pamiętaj, aby '#import ' umożliwić wywołanie klasy na instancji. – Raspu

26

jeśli wszystko, co chcesz zrobić, to sprawdzić obiekt, aby zobaczyć, czy jest to rodzaj pewnej klasy

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

Dzięki, wykorzystam to :) – Robin

+8

Wzniesiono głos dla przewidywania potrzeby, a nie tylko odpowiedzi na pytanie. –

15

Od wewnątrz samego

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

Absolutnie nie chcę wzbudzać złości, ale była to druga odpowiedź związana z systemem iOS w twoim profilu. Wydaje mi się, że dodam tylko, że możemy odnieść się do instancji jako "ja" z poziomu jej wdrożenia. Czy broniłbyś tego, dodając zasadniczo do przyjętej trzyletniej odpowiedzi? – danh

+0

@danh Widzę, że mnie ścigasz. Dobrze dla ciebie! –

+0

Przepraszam, po prostu kliknąłem ten i zastanawiałem się, czy coś powiedzieć. Po prostu chciałem zrobić delikatne ściągacze, ale wiem, że w tych semi-anonimowych ustawieniach temperament bardzo szybko się rozgrzewa. Dziękuję za to, że jesteście z tego dobroduszni. (W rzeczywistości +1 za praktykowanie enkapsulacji). – danh

0

klasie Jeśli szukasz jak dostać classname w Swift możesz użyć reflect, aby uzyskać informacje o obiekcie.

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

lub po prostu 'self.dynamicType' – jbg

1

Można również użyć [[self class] description]

2

Wystarczy dodać kategorię:

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

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

następnie użyć następującego kodu:

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

lub nawet:

NSString *className = SomeObject.new.className; 

Aby użyć go w dowolnym miejscu, dodaj kategorię do pliku YourProject.pch.

+0

Po wywołaniu klasy Swift zwraca ona nazwę klasy o podanej nazwie. – Alper