webentwicklung-frage-antwort-db.com.de

iPhone, wie man den Typ eines Objekts überprüft?

Ich möchte den Typ eines Objekts überprüfen. Wie kann ich das machen?

Das Szenario ist, dass ich ein Objekt erhalte. Wenn dieses Objekt vom Typ A ist, führen Sie einige Operationen aus. Wenn es vom Typ B ist, führen Sie einige Operationen durch. Derzeit ist der Typ des Objekts C, das übergeordnet zu A und B ist.

Ich habe zwei Klassen AViewController und BViewController. Das Objekt, das ich in UIViewController bekomme. Wie kann man nun überprüfen, ob das Objekt AViewController oder BViewController ist?

63
g.revolution
if([some_object isKindOfClass:[A_Class_Name class]])
{
    // do somthing
}
152
Pavel Yakimenko

Es gibt einige Methoden in NSObject, mit denen Sie Klassen überprüfen können.

Zuerst gibt es -class, das die Klasse Ihres Objekts zurückgibt. Dies gibt entweder AViewController oder BViewController zurück.

Dann gibt es zwei Methoden, -isKindofClass: und isMemberOfClass:.

-isKindOfClass: vergleicht den Empfänger mit der als Argument übergebenen Klasse und gibt je nachdem, ob die Klasse vom selben Typ oder einer Unterklasse der angegebenen Klasse ist oder nicht, true oder false zurück.

-isMemberOfClass: vergleicht den Empfänger mit der als Argument übergebenen Klasse und gibt true oder false zurück, je nachdem, ob die Klasse genau dieselbe Klasse wie die angegebene Klasse ist oder nicht.

45
Jasarien

Ein häufigeres Muster in Objective-C besteht darin, zu überprüfen, ob das Objekt auf die Methoden reagiert, an denen Sie interessiert sind. Beispiel:

if ([object respondsToSelector:@selector(length)]) {
    // Do something
}

if ([object conformsToProtocol:@protocol(NSObject)]) {
    // Do something
}
3
rpetrich