2009-09-02 11 views
61

Quiero verificar el tipo de un Objeto. ¿Cómo puedo hacer eso?iPhone cómo comprobar el tipo de un objeto?

El caso es que recibo un objeto. Si ese objeto es de tipo A, entonces realiza algunas operaciones. Si es de tipo B, entonces realiza algunas operaciones. Actualmente, el tipo de objeto es C que es primario de A y B.

Tengo dos clases AViewController y BViewController. El objeto que obtengo en UIViewController. Ahora, ¿cómo verificar si el objeto es AViewController o BViewController?

+0

víctima de http://stackoverflow.com/questions/1144629/in -objective-c-how-do-i-test-the-object-type – ennuikiller

Respuesta

152
if([some_object isKindOfClass:[A_Class_Name class]]) 
{ 
    // do somthing 
} 
+6

La publicación de @Jasarien es más específica. Por ejemplo, comparar si un objeto es KindOfClass [UIView class] le devolverá incluso UIImageViews, UIImages, UIRoundRectButtons ..... Entonces, en este caso, "isMemberOfClass podría ser la mejor solución. –

44

Existen algunos métodos en NSObject que le permiten verificar las clases.

Primero está -class que devolverá la Clase de su objeto. Esto devolverá AViewController o BViewController.

Luego hay dos métodos, -isKindofClass: y isMemberOfClass:.

-isKindOfClass: comparará el receptor con la clase pasada como argumento y devolver verdadero o falso dependiendo de si o no la clase es del mismo tipo o una subclase de la clase dada.

-isMemberOfClass: comparará el receptor con la clase pasada como argumento y devolverá verdadero o falso en función de si la clase es estrictamente la misma clase que la clase dada.

3

un patrón más común en Objective-C es comprobar si el objeto responde a los métodos de su interés en el Ejemplo:.

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

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

Esto es cierto, pero no es muy útil en este caso Los dos objetos que interesan al interrogador son ambas subclases de un controlador de vista particular. Cada uno puede implementar el mismo método, pero se comporta de manera diferente. Por lo tanto, él o ella necesita saber con qué subclase están tratando. – Jasarien

+0

Si ese es el caso , probablemente debería refactorizar su diseño. isKindOfClass: definitivamente funcionará, pero generalmente no es muy fácil de mantener a largo plazo. – rpetrich

Cuestiones relacionadas