#ios #arrays #object
#iOS #массивы #объект
Вопрос:
У меня есть NSArray, который заполнен объектами разных типов. Допустим, один из них — NSDictionary, а другой — NSData. Как бы я случайным образом выбрал объект из этого массива, а затем проверил, что это за объект. Итак, если это NSDictionary, я использую метод A. Или, если это NSData, я использую метод B.
Как бы я поместил это в код?
Спасибо!
Ответ №1:
Переведено на Objective-C
id obj = [array methodThatReturnsARandomObject];
if ([obj isKindOfClass:[NSDictionary class]]) {
a();
} else if ([obj isKindOfClass:[NSData class]]) {
UIImage *image = [UIImage imageWithData:obj]
}
Или вы можете сделать
NSObject *obj = [array methodThatReturnsARandomObject];
if ([obj isKindOfClass:[NSDictionary class]]) {
a();
} else if ([obj isKindOfClass:[NSData class]]) {
UIImage *image = [UIImage imageWithData:(NSData *)obj]
}
На самом деле не имеет значения.
Комментарии:
1. Один вопрос. Итак, в методе B, скажем, я преобразую NSData в UIImage, как бы я это сделал? Я пытался использовать переменную obj, но, похоже, она выдает предупреждение.
2. Вы пробовали [UIImage imageWithData:obj]?
3. Да, я получаю несовместимые типы указателей, отправляя ‘NSObject’ в параметр типа ‘NSData’
4. Я получаю это предупреждение, когда делаю это: UIImage * image = [UIImage imageWithData:obj]; sprite = [CCSprite spriteWithFile: image];
5. Ах да,
imageWithData:
аргумент должен бытьNSData
или унаследован отNSData
. Используйтеid
в качестве типа, чтобы пропустить проверку во время компиляции или использовать явное приведение. Обновлен мой пример кода.
Ответ №2:
Вы можете использовать генератор случайных чисел, который получит число, находящееся между 0 и последним индексом вашего массива. Затем, как только вы получите объект, вы можете использовать метод isKindOfClass или isMemberOfClass для объекта, который возвращается из массива.