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?
if([some_object isKindOfClass:[A_Class_Name class]])
{
// do somthing
}
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.
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
}