iPhone jak sprawdzić typ obiektu?

Chcę sprawdzić typ obiektu. Jak mogę to zrobić?

Scenariusz jest taki, że dostaję przedmiot. Jeśli ten obiekt jest typu A, wykonaj kilka operacji. Jeśli jest typu B, wykonaj kilka operacji. Obecnie typem obiektu jest C, który jest rodzicem A i B.

Mam dwie klasy AViewController iBViewController. Obiekt, do którego Wchodzę UIViewController. Jak sprawdzić czy obiekt jest AViewController Czy BViewController?

Author: Arulkumar, 2009-09-02

3 answers

if([some_object isKindOfClass:[A_Class_Name class]])
{
    // do somthing
}
 152
Author: Pavel Yakimenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-02 14:50:35

Istnieje kilka metod na NSObject, które pozwalają sprawdzać klasy.

Najpierw jest -class, które zwróci klasę Twojego obiektu. Zwróci AViewController lub BViewController.

Następnie są dwie metody, -isKindofClass: i isMemberOfClass:.

-isKindOfClass: porównuje Odbiornik Z klasą przekazaną jako argument i zwraca true lub false w zależności od tego, czy klasa jest tego samego typu czy podklasą danej klasy.

-isMemberOfClass: będzie porównywać Odbiornik Z klasą przekazaną jako argument i zwraca true lub false na podstawie tego, czy klasa jest ściśle tą samą klasą co dana klasa.

 44
Author: Jasarien,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-20 10:25:36

Bardziej powszechnym wzorcem w Objective-C jest sprawdzenie, czy obiekt reaguje na metody, którymi jesteś zainteresowany. Przykład:

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

if ([object conformsToProtocol:@protocol(NSObject)]) {
    // Do something
}
 3
Author: rpetrich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-02 15:17:50