Abrufen des Klassennamens von einer Instanz


141

Ich habe das folgende Problem: Ich erhalte eine Instanz einer Klasse übergeben und möchte den Namen der Klasse dieser Instanz wissen. Wie bekomme ich das?


Vielleicht Ihre Frage umformulieren oder die Antwort akzeptieren, die der Frage entspricht?
Jasper Blues

@ JasperBlues: Fertig, wusste nicht einmal, wie beliebt das wurde!
Robin

Antworten:


394

NSStringFromClass([instance class]) sollte den Trick machen.


33
Upvoted für die Beantwortung der Frage, damit Googler eine Antwort erhalten können, anstatt die Notwendigkeit zu antizipieren.
Gleno

2
Denken Sie daran #import <objc/objc-runtime.h>, die Klasse für eine Instanz aufrufen zu können.
JP Illanes

28

Wenn Sie nur ein Objekt testen möchten, um festzustellen, ob es sich um einen Typ einer bestimmten Klasse handelt

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

18

Aus der Klasse heraus

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

2
Ich möchte auf keinen Fall Ihre Wut erregen, aber dies war die zweite Antwort auf iOS in Ihrem Profil. Es scheint mir nur hinzuzufügen, dass wir eine Instanz innerhalb ihrer Implementierung als "Selbst" bezeichnen können. Würden Sie dies verteidigen, um die akzeptierte Antwort des Dreijährigen wesentlich zu ergänzen?
Danh

@danh Ich sehe, du jagst mich. Schön für dich!
Katedral Pillon

Entschuldigung, ich habe gerade auf diesen geklickt und darüber diskutiert, ob ich etwas sagen soll. Ich wollte nur ein bisschen rippen, aber ich weiß, dass die Gemüter in diesen halbgesichtslosen Umgebungen ziemlich schnell heiß werden. Danke, dass du gutmütig bist. (Tatsächlich +1 zum Üben der Kapselung).
Danh

2
Dies fügt der Antwort nichts hinzu, außer Ärger.
Nikolai Ruhe

1
Sollte dies zu einer Klassenmethode machen
Bhumit Muchhadia

2

Fügen Sie einfach eine Kategorie hinzu:

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

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

Verwenden Sie dann den folgenden Code:

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

oder auch:

NSString *className = SomeObject.new.className;

Um es überall zu verwenden, fügen Sie die Kategorie zur Datei YourProject.pch hinzu.


Wenn eine Swift-Klasse aufgerufen wird, wird ein Klassenname mit Namespace zurückgegeben.
Alper


1

OBJC:

NSStringFromClass([instance class])

SCHNELL

Von der Instanz:

String(describing: YourType.self)

Vom Typ:

String(describing: self)

0

Wenn Sie suchen, wie Sie den Klassennamen in Swift erhalten, können Sie Reflect verwenden, um Informationen zum Objekt abzurufen.

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

oder einfachself.dynamicType
jbg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.