Using enum in Objective-C?

匿名 (未验证) 提交于 2019-12-03 02:06:01

问题:

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

回答1:

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!



回答2:

good explanation, right here: What is a typedef enum in Objective-C?



回答3:

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.



回答4:

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]; 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!