Pobieranie nazwy klasy z instancji

142

Mam następujący problem: Otrzymuję wystąpienie klasy, która przeszła i chcę poznać nazwę tej klasy. Jak to zdobyć?

Rudzik
źródło
Może przeformułuj swoje pytanie lub zaakceptuj odpowiedź, która pasuje do pytania?
Jasper Blues
@JasperBlues: Gotowe, nawet nie zdawałem sobie sprawy, jak popularne stało się to!
Robin

Odpowiedzi:

396

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

CiNN
źródło
33
Głosowano za odpowiedzią na pytanie, aby pracownicy Google mogli uzyskać odpowiedź, zamiast przewidywać potrzebę.
Gleno
2
Pamiętaj, aby #import <objc/objc-runtime.h>móc wywołać klasę na instancji.
JP Illanes
28

jeśli wszystko, co chcesz zrobić, to przetestować obiekt, aby sprawdzić, czy jest to typ określonej klasy

BOOL test = [self isKindOfClass:[SomeClass class]];
kubi
źródło
18

Z samej klasy

-(NSString *) className
{
    return NSStringFromClass([self class]);
}
Katedral Pillon
źródło
2
Absolutnie nie chcę budzić złości, ale to była druga odpowiedź na Twoim profilu związana z iOS. Wydaje mi się, że dodam tylko, że możemy odwołać się do instancji jako „ja” od strony jej implementacji. Czy broniłbyś tego jako istotnego dodania do zaakceptowanej odpowiedzi trzylatka?
danh
@danh Widzę, że mnie ścigasz. Dobrze dla ciebie!
Katedral Pillon
Przepraszam, właśnie kliknąłem ten i zastanawiałem się, czy cokolwiek powiedzieć. Chciałem tylko zrobić delikatny ściągacz, ale wiem, że w tych pół-twarzowych ustawieniach dość szybko robi się gorąco. Dzięki za dobroduszność. (W rzeczywistości +1 za ćwiczenie hermetyzacji).
danh
2
To nic nie dodaje do odpowiedzi poza kłopotami.
Nikolai Ruhe
1
Powinno to uczynić z tego metodę klasową
Bhumit Muchhadia
2

Po prostu dodaj kategorię:

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

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

Następnie użyj 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.

ealee
źródło
W przypadku wywołania w klasie Swift zwraca nazwę klasy z przestrzenią nazw.
Alper
1

Możesz także użyć [[self class] description]

Jeremie D
źródło
1

OBJC:

NSStringFromClass([instance class])

SZYBKI

Z instancji:

String(describing: YourType.self)

Od typu:

String(describing: self)
Lal Krishna
źródło
0

Jeśli szukasz sposobu na uzyskanie nazwy klasy w Swift, możesz użyć funkcji Reflect, aby uzyskać informacje o obiekcie.

let tokens = split(reflect(self).summary, { $0 == "." })
if let typeName = tokens.last {
    println(typeName)
}
Roman Barzyczak
źródło
lub po prostuself.dynamicType
jbg