Мне нужно проверить, имеет ли объект тип NSString
или UIImageView
. Как я могу это сделать? Существует ли какой-либо тип метода "isoftype"?
В Objective-C, как я могу проверить тип объекта?
Ответ 1
Если ваш объект myObject
, и вы хотите проверить, является ли это NSString
, код будет выглядеть следующим образом:
[myObject isKindOfClass:[NSString class]]
Аналогично, если вы хотите протестировать myObject
для UIImageView
:
[myObject isKindOfClass:[UIImageView class]]
Ответ 2
Вы, вероятно, используете
- (BOOL)isKindOfClass:(Class)aClass
Это метод NSObject
.
Подробнее см. документацию NSObject
.
Вот как вы это используете.
BOOL test = [self isKindOfClass:[SomeClass class]];
Вы также можете попробовать сделать что-то вроде этого
for(id element in myArray)
{
NSLog(@"=======================================");
NSLog(@"Is of type: %@", [element className]);
NSLog(@"Is of type NSString?: %@", ([[element className] isMemberOfClass:[NSString class]])? @"Yes" : @"No");
NSLog(@"Is a kind of NSString: %@", ([[element classForCoder] isSubclassOfClass:[NSString class]])? @"Yes" : @"No");
}
Ответ 3
Если вы хотите отличаться от суперкласса и inheritedClass, вы можете использовать:
if([myTestClass class] == [myInheritedClass class]){
NSLog(@"I'm the inheritedClass);
}
if([myTestClass class] == [mySuperClass class]){
NSLog(@"I'm the superClass);
}
Использование - (BOOL)isKindOfClass:(Class)aClass
в этом случае приведет к TRUE оба раза, потому что inheritedClass также является своего рода суперклассом.
Ответ 4
Выполняя простой тест, я думал, что буду документировать, что работает, а что нет. Часто я вижу, что люди проверяют, является ли класс объекта членом другого класса или равен другому классу.
В приведенной ниже строке мы имеем несколько плохо сформированных данных, которые могут быть NSArray
, NSDictionary
или (null)
.
NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"];
Это те тесты, которые были выполнены:
NSLog(@"%@", [hits class]);
if ([hits isMemberOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
isKindOfClass
работал довольно хорошо, а isMemberOfClass
не выполнял.
Ответ 5
Вы можете использовать следующий код, чтобы проверить типы примитивных типов данных.
// Returns 0 if the object type is equal to double
strcmp([myNumber objCType], @encode(double))
Ответ 6
Простой, [класс yourobject] он вернет имя класса yourobject.
Ответ 7
С Swift 2.0 вы можете использовать только оператор is
;
if myVariable is kindOfClass {
...
}
Например, вы ищете тип UITextView и узнаете, какой индекс в ваших представлениях выглядит таким образом:
for subView in view.subviews where subView is UITextView {
...
}