Мне нужно проверить, имеет ли объект тип NSString
или UIImageView
. Как я могу это сделать? Существует ли какой-либо тип метода «isoftype»?В Objective-C, как я могу проверить тип объекта?
ответ
Если ваш объект myObject
, и вы хотите, чтобы проверить, чтобы увидеть, если это NSString
, код будет:
[myObject isKindOfClass:[NSString class]]
Точно так же, если вы хотите, чтобы проверить myObject
для UIImageView
:
[myObject isKindOfClass:[UIImageView class]]
Обратите внимание, что есть также isMemberOfClass: метод, который будет проверять точность класса. Будьте осторожны с этим, поскольку многие объекты Apple на самом деле являются основными типами Foundation Foundation. (Например, NSString чаще всего является NSCFString, а isMemberOfClass: возвращает false для этого сравнения.) –
Обратите внимание, что этот метод очень медленный! – SAKrisT
Правильно ли это, что NSString - кластер классов? (как NSNumber) – Ricardo
Вы бы, вероятно, использовать
- (BOOL)isKindOfClass:(Class)aClass
Это метод NSObject
.
Для получения дополнительной информации проверьте документацию NSObject
.
Так вы используете это.
BOOL test = [self isKindOfClass:[SomeClass class]];
Вы также можете попробовать сделать Somthing как этот
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");
}
Что это за 'className' Я не могу заставить его работать с моими идентификаторами –
да нет такой вещи –
-1: Не используйте' className', он может работать или не работать на OS X, но он не в iOS, и это не предназначено для этого. Кроме того, эти 'NSLog' не делают то, что, как я думаю, вы имели в виду, - они проверяют имя класса (всегда строку) и класс кодера, как ни странно, вместо класса фактического элемента. – andyvn22
Запуск простой тест, я думал, что документ, что работает, а что нет. Часто я вижу, что люди проверяют, является ли класс объекта членом другого класса или равен другому классу.
Для приведенной ниже строки мы имеем некоторые плохо сформированные данные, которые могут быть 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
не сделал.
Если вы хотите, чтобы отличаться от суперкласса и 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
в этом случае может привести к ИСТИНА как раз потому, что inheritedClass тоже своего рода суперкласса.
'isMemberOfClass:' будет возвращать 'NO' при работе с подклассами. – mipadi
Вы можете использовать следующий код, чтобы проверить типы примитивных типов данных.
// Returns 0 if the object type is equal to double
strcmp([myNumber objCType], @encode(double))
Простой, [класс yourobject] он вернет имя класса вашего объекта.
На самом деле он вернет объект класса. Однако «описание» этого объекта будет именем класса в виде строки, поэтому вы можете, тем не менее, занести его в консоль. – devios1
- 1. Я утечка этого объекта ObjectiveC?
- 2. Как я могу проверить тип в MongoDB?
- 3. iPhone, как проверить тип объекта?
- 4. Как я могу проверить тип изображения?
- 5. Как я могу проверить тип DataGridViewCell?
- 6. Проверить тип объекта python
- 7. Как проверить тип объекта T?
- 8. Как я могу узнать тип объекта в Canvas.Children
- 9. как проверить тип объекта в C++
- 10. Как проверить тип объекта в Python?
- 11. Как проверить тип объекта в C++/CLI?
- 12. Как проверить тип универсального объекта в методе?
- 13. Как проверить тип объекта в VB Script
- 14. Как проверить тип объекта в Python?
- 15. Как я могу проверить язык приложения xcode?
- 16. Могу ли я получить общий тип объекта?
- 17. Могу ли я ограничить тип объекта NSMutableArray?
- 18. SwiftyJSON - можно проверить тип объекта?
- 19. Как я могу проверить тип носителя, преобразованного в NSData
- 20. Как я могу проверить динамику базы данных/тип в Slick
- 21. Как я могу проверить тип виджета программно в Android?
- 22. Как я могу проверить тип в мангуст валидатора
- 23. Как проверить тип объекта - это изображение?
- 24. Symfony2 - Как проверить тип формы объекта автозаполнения?
- 25. Проверить Тип объекта ios swift
- 26. VB.Net - как я могу получить тип объекта, содержащийся в списке
- 27. Как я могу изменить тип значения объекта в C++
- 28. Как я могу проверить тип объекта при добавлении объектов в коллекцию <T>?
- 29. Как проверить тип значения из объекта JSONObject?
- 30. В Python, как я могу проверить размер объекта StringIO?
См. [В Objective-C, что является эквивалентом слова «instanceof» java? »(Http://stackoverflow.com/questions/536396/in-objective-c-what-is-the-equivelant- of-the-java-instanceof-keyword) – Reunanen
Да, есть: '[object isKindOfClass: [ClassName class]]' –