Что такое перечисление типов в Objective-C?

Придерживайтесь встроенной функцией сортировки. Quicksort - это простой алгоритм, но для получения хорошей производительности на компьютерах, которые на самом деле используются, требуется немного тонкости. Более чем вероятно, что встроенная функция уже оптимизирована, чем все, что вы могли бы написать за разумное время. (Вероятно, использование константного фактора из написания в C вместо PHP также полезно.)

Если вы сортируете так много элементов, что вы замедляете функцию сортировки, вы, вероятно, делаете что-то неправильно , (Это, в конце концов, PHP. Вы должны использовать язык общего назначения для интенсивной обработки данных. Будет проще писать код, и он будет работать быстрее.)

1079
задан Dragon Energy 3 December 2015 в 19:56
поделиться

2 ответа

Три вещи объявляются здесь: анонимный перечислимый тип объявляется, ShapeType объявляется определением типа для того анонимного перечисления и тремя именами kCircle, kRectangle, и kOblateSpheroid объявляются как интегральные константы.

Давайте сломаем это. В самом простом случае перечисление может быть объявлено как

enum tagname { ... };

Это объявляет перечисление с тегом tagname. В C и Objective C (но не C++), любым ссылкам на это нужно предшествовать с enum ключевое слово. Например:

enum tagname x;  // declare x of type 'enum tagname'
tagname x;  // ERROR in C/Objective-C, OK in C++

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

enum tagname { ... };
typedef enum tagname tagname;  // declare 'tagname' as a typedef for 'enum tagname'

Это может быть упрощено в одну строку:

typedef enum tagname { ... } tagname;  // declare both 'enum tagname' and 'tagname'

И наконец, если мы не должны мочь использовать enum tagname с enum ключевое слово, мы можем сделать enum анонимный и только объявляют это с именем определения типа:

typedef enum { ... } tagname;

Теперь, в этом случае, объявляем мы ShapeType быть typedef'ed названием анонимного перечисления. ShapeType действительно просто целочисленный тип и должен только использоваться для объявления переменных, которые содержат одно из значений, перечисленных в объявлении (то есть, один из kCircle, kRectangle, и kOblateSpheroid). Можно присвоить a ShapeType переменная другое значение путем кастинга, тем не менее, таким образом, необходимо быть осторожными при чтении перечислимых значений.

Наконец, kCircle, kRectangle, и kOblateSpheroid объявляются как интегральные константы в глобальном пространстве имен. Так как никакие определенные значения не были указаны, они присвоены последовательным целым числам, запускающимся с 0, таким образом, kCircle 0, kRectangle 1, и kOblateSpheroid 2.

1562
ответ дан 19 December 2019 в 20:19
поделиться

Определяемый пользователем тип, который имеет возможные значения kCircle, kRectangle, или kOblateSpheroid. Значения в перечислении (kCircle, и т.д.) видимы вне перечисления, все же. Важно иметь это в виду (int i = kCircle; допустимо, например).

34
ответ дан 19 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: