Главная » iPhone, Objective-C, Программирование для iOS и MacOS » enum Objective-C

0

Часто в программе требуется определить набор констант. Допустим, вы программируете блендер с пятью рабочими режимами. Ваш класс B1ender содержит метод setSpeed:. Было бы хорошо, если бы тип аргумента указывал, что допустимыми являются только пять конкретных значений. Для этого в программе определяется перечисляемый тип, или перечисление:

enum BlenderSpeed { BlenderSpeedStir = 1,

BlenderSpeedChop = 2,

BlenderSpeedLiquify = 5,

BlenderSpeedPulse = 9,

BlenderSpeedIceCrush = 15

};

@interface Blender : NSObject

{

// пять допустимых значений скорости enum BlenderSpeed speed;

}

// setSpeed: получает одно из пяти допустимых значений

-­‐     (void)setSpeed:(enum   BlenderSpeed)x;

@end

Чтобы разработчикам не приходилось постоянно вводить enum BlenderSpeed,

они часто определяют сокращенную запись с использованием

typedef enum { BlenderSpeedStir = 1,

BlenderSpeedChop = 2,

BlenderSpeedLiquify = 5,

BlenderSpeedPulse = 9,

BlenderSpeedIceCrush = 15

} BlenderSpeed;

@interface Blender : NSObject

{

// пять допустимых значений скорости BlenderSpeed speed;

}

// setSpeed: получает одно из пяти допустимых значений

-­‐         (void)setSpeed:(BlenderSpeed)x;

@end

Часто для программиста совершенно неважно, какими числами представлены пять скоростей – лишь бы они отличались друг от друга. Значения элементов перечисления можно не указывать, в этом случае компилятор сгенерирует их автоматически:

typedef enum { BlenderSpeedStir, BlenderSpeedChop, BlenderSpeedLiquify, BlenderSpeedPulse, BlenderSpeedIceCrush

} BlenderSpeed;

#define и глобальные переменные

Если для определения констант можно использовать как #define, так и глобальные переменные (включая enum), почему программисты Objective-C обычно используют глобальные переменные? Иногда глобальные переменные повышают быстродействие программы. Например, при работе с глобальной переменной для сравнения строк можно использовать == вместо isEqual: (а математическая операция выполняется быстрее отправки сообщения). Кроме того, с глобальными переменными удобнее работать в отладчике.

Используйте для констант глобальные переменные и enum, а не #define.

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии