fuzzygoat
fuzzygoat

Reputation: 26223

Using enum in Objective-C?

Is this the correct (or even a valid way) to use emums in Objective-C? i.e. The menuItem is not used but just defines a list add=1, load=2, list=3 etc.

enum menuItems {
    add = 1    ,
    save       ,
    load       ,
    list       ,
    removeAll  ,
    remove     ,
    quit       
};

int optionSelect;

scanf("%d", &optionSelect);

switch (optionSelect) {
    case add: 
        //...
        break;
}

cheers gary

Upvotes: 13

Views: 23088

Answers (3)

Tommy
Tommy

Reputation: 100652

In this, the future, it's possibly also helpful to mention NS_ENUM. You'd use it like:

typedef NS_ENUM(uint16_t, TYEnummedType)
{
    TYEnummedType1,
    TYEnummedType2
};

That has almost the same effect as a normal enum and typedef but explicitly dictates the integer type, which is really helpful if you ever want to pack these things off somewhere, be precise in your struct alignment, amongst other uses.

It was added to the iOS SDK with version 6 and OS X with 10.8 but it's just a C macro and doesn't add anything that you couldn't do with vanilla typedef and enum, so there's no backwards compatibility to worry about. It exists only explicitly to tie the two things together.

Upvotes: 4

Boris Vidolov
Boris Vidolov

Reputation: 149

Your way will work. However, if you would like to use menuItems as a type for variables or parameters, you will need to do a typedef:

typedef enum {add = 1,save,load,list,removeAll,remove,quit}  menuItems;
menuItems m = add;
[myobj passItem:m];

Upvotes: 1

BitDrink
BitDrink

Reputation: 1193

If you want to give a semantic meaning to the enumeration, you can consider to define a customized type and declare the variable "optionSelect" as variable of that type! In code...

typedef enum menuItems {
       add = 1,
       save,
       load,
       list,
       removeAll,
       remove,
       quit} MenuItem;


MenuItem optionSelect;

scanf("%d", &optionSelect);

switch (optionSelect) {
    case add: 
    ...
    break;
    .
    .
    .
}

That is, almost, the same thing you have written, but from the side of the developer you give a particular meaning to the variable "optionSelect", not just a simple int!

Upvotes: 17

Related Questions