Получить тип объекта, случайно выбранный из массива?

#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 для объекта, который возвращается из массива.