Necesito probar si el objeto es de tipo NSString
o UIImageView
. ¿Cómo puedo lograr esto? ¿Hay algún tipo de método "isoftype"?
ios
objective-c
James Skidmore
fuente
fuente
[object isKindOfClass:[ClassName class]]
Respuestas:
Si su objeto es
myObject
, y desea probar para ver si es unNSString
, el código sería:Del mismo modo, si desea probar
myObject
paraUIImageView
:fuente
Probablemente usarías
Este es un método de
NSObject
.Para más información consulte la
NSObject
documentación.Así es como usas esto.
También podrías intentar hacer algo como esto
fuente
className
, puede o no funcionar en OS X, pero no está en iOS y no debe usarse para esto. Además, esosNSLog
no hacen lo que creo que querías que hicieran: están comprobando el nombre de la clase (siempre una cadena) y la clase del codificador, curiosamente, en lugar de la clase del elemento real.NSLog(@"Is of type: %@", [element class]);
funcionará en iOS 7Cuando desee diferenciar entre una superclase y la clase heredada, puede usar:
El uso
- (BOOL)isKindOfClass:(Class)aClass
en este caso daría como resultado VERDADERO las dos veces porque la clase heredada también es una especie de superclase.fuente
isMemberOfClass:
regresaráNO
cuando se trate de subclases.Al ejecutar una prueba simple, pensé en documentar lo que funciona y lo que no. A menudo veo personas que comprueban si la clase del objeto es miembro de la otra clase o si es igual a la otra clase.
Para la siguiente línea, tenemos algunos datos mal formados que pueden ser an
NSArray
, anNSDictionary
o(null)
.Estas son las pruebas que se realizaron:
isKindOfClass
funcionó bastante bien mientrasisMemberOfClass
no lo hizo.fuente
Puede utilizar el siguiente código en caso de que desee verificar los tipos de tipos de datos primitivos.
fuente
Simple, [clase yourobject] devolverá el nombre de clase de yourobject.
fuente
Class
objeto. Sin embargo, eldescription
de este objeto será el nombre de la clase como una cadena, por lo que aún puede iniciar sesión en la consola.