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ć?


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ę.


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

18

Z samej klasy

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

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.


W przypadku wywołania w klasie Swift zwraca nazwę klasy z przestrzenią nazw.
Alper


1

OBJC:

NSStringFromClass([instance class])

SZYBKI

Z instancji:

String(describing: YourType.self)

Od typu:

String(describing: self)

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

lub po prostuself.dynamicType
jbg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.