Objective-C возвращает массив перечислений из метода - PullRequest
2 голосов
/ 01 октября 2010

У меня в коде target-C есть перечисление, похожее на это:

typedef enum {
    FRUIT_APPLE = 1,
    FRUIT_PEAR = 2,
    FRUIT_BANANA = 3,
    // etc. 
} Fruit

Мне нужно иметь возможность вернуть массив из них в методе, что-то вроде этого:

@implementation FruitTest

static Fruit fruits[] = {FRUIT_APPLE, FRUIT_BANANA};

+(Fruit[]) fruits
{
    return fruits;
} 

@end

Однако это приводит к ошибке компиляции:

#1  'fruits' declared as method returning an array 
#2  Incompatible types in return

Есть идеи, как это решить? Спасибо!

Ответы [ 2 ]

2 голосов
/ 01 октября 2010
  • С кодом C вы не можете вернуть массив напрямую, как ваш текущий код, но вам нужно вернуть указатель.В obj-c вы также можете использовать NSArray, который вы можете вернуть.

  • Однако вы не можете сделать массив перечислений, ни массив int или NSInteger, вам нужно сделать как fruits = [NSArray arrayWithObjects:[NSNumber numberWithInt:enumValue]];

Ваш код должен выглядеть так:

static NSArray *fruits;

+ (NSArray *)myFruits {
  if (!fruits) {
    fruits = [NSArray arrayWithObjects:[NSNumber numberWithInt:enumValue], nil];
  }
}
1 голос
/ 01 октября 2010

Вы должны объявить метод как возвращающий указатель на Fruit, а не массив. Вы можете сделать это так:

@implementation FruitTest

static Fruit fruits[] = {FRUIT_APPLE, FRUIT_BANANA};

+(Fruit *) fruits
{
    return fruits;
} 

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...