iOS 枚举类型学习

摘要:
enumstatus{copy,delete};枚举类型status仅有两个数据,一个是copy,一个是delete,序号为0、1,代表复制与删除。而enum是枚举类型,有了typedef的理解容易看出,typedefenum定义了枚举类型,类型变量取值在enum{}范围内取,在使用中二者无差别。

一,两者的用法

枚举类型定义用关键字enum标识,形式为:
enum 标识符
{

枚举数据表

};
枚举数据(枚举常量)是一些特定的标识符,标识符代表什么含义,完全由程序员决定。数据枚举的顺序规定了枚举数据的序号,从0开始,依次递增。
enum status
{

copy,

delete

};
枚举类型status仅有两个数据,一个是copy,一个是delete,序号为0、1,代表复制与删除。
enum status
{

copy=6,

delete

};
则copy的序号为6,delete的序号为7。
enum用来定义一系列宏定义常量区别用,相当于一系列的#define xx xx,当然它后面的标识符也可当作一个类型标识符;typedefenum则是用来定义一个数据类型,那么该类型的变量值只能在enum定义的范围内取。两者在这点上是没有差别的。

二,一些说明

用enum定义的类型,只能在它的值域范围内取。比如:

#include "stdafx.h"

enum led_type
{
led_off = 0,
led_half = 127,
led_on = 255,
};

void crake(led_type xx)
{
printf("%d /n",xx);
}
int _tmain()
{
crake(0);
crake(22);
crake(333);

return 0;
}

编译时程序都会报错:error C2664: 'crake' : cannot convert parameter 1 from 'int' to 'led_type'。尽管enum的类型值仍然是整形,但并不意味着它可以接受范围外的整型数。(关于此问题,在Linux中,由别人验证是可以编译通过的。因为两者的C编译法则有差别)

enum和enum typedef 在IOS中的使用

第一、typedef的使用

C语言里typedef的解释是用来声明新的类型名来代替已有的类型名,typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)

如:typedef char gender;

gender a;与char a;语句相同。

第二 、enum的使用

enum是枚举类型,enum用来定义一系列宏定义常量区别用,相当于一系列的#define xx xx,当然它后面的标识符也可当作一个类型标识符。

如:

enumAlertTableSections

{

kUIAction_Simple_Section = 1,

kUIAction_OKCancel_Section,

kUIAction_Custom_Section,

kUIAlert_Simple_Section,

kUIAlert_OKCancel_Section,

kUIAlert_Custom_Section,

};

kUIAction_OKCancel_Section的值为2.

第三、typedef enum 的使用

typedefenum则是用来定义一个数据类型,那么该类型的变量值只能在enum定义的范围内取。

typedefenum{

UIButtonTypeCustom =0, // no button type

UIButtonTypeRoundedRect, // rounded rect, flat white button, like in address card

UIButtonTypeDetailDisclosure,

UIButtonTypeInfoLight,

UIButtonTypeInfoDark,

UIButtonTypeContactAdd,

} UIButtonType;

UIButtonType表示一个类别,它的值只能是UIButtonTypeCustom....

在了解enum和typedef enum的区别之前先应该明白typedef的用法和意义。

C语言里typedef的解释是用来声明新的类型名来代替已有的类姓名,例如:

typedef int CHANGE;

指定了用CHANGE代表int类型,CHANGE代表int,那么:

int a,b;和CHANGE a,b;是等价的、一样的。

方便了个人习惯,熟悉的人用CHANGE来定义int。

typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。

而enum是枚举类型,有了typedef的理解容易看出,typedef enum定义了枚举类型,类型变量取值在enum{}范围内取,在使用中二者无差别。

enumAlertTableSections

{

kUIAction_Simple_Section =0,

kUIAction_OKCancel_Section,

kUIAction_Custom_Section,

kUIAlert_Simple_Section,

kUIAlert_OKCancel_Section,

kUIAlert_Custom_Section,

};

typedefenum{

UIButtonTypeCustom =0, // no button type

UIButtonTypeRoundedRect, // rounded rect, flat white button, like in address card

UIButtonTypeDetailDisclosure,

UIButtonTypeInfoLight,

UIButtonTypeInfoDark,

UIButtonTypeContactAdd,

} UIButtonType;

看上面两个例子更好理解,下面的是UIButton的API,UIButtonType指定的按钮的类型,清楚名了,上面的直接调用enum里的元素就可以了。

免责声明:文章转载自《iOS 枚举类型学习》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jquery倒计时插件可自定义多个倒计时间小程序-formdata传参下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

枚举类型转换成字符串

使用枚举类型默认的ToString()方法,往往不能得到我们想要的输出的字符串。如何方便的定义枚举类型中的每个值代表的字符串输出呢?可以使用DescriptionAttribute, 写上想得到的字符串输出。 enumDirection { [Description("Rover is facing to UP (Negtive Y)")]...

枚举值使用小结

枚举值绑定到下拉框: 方法一: 绑定 enum TestEnum {zero=0,one=1,two=2}       ComboBox cbo = new ComboBox(); cbo.DataSource = System.Enum.GetNames(typeof(TestEnum)); enum test=enum.one; cbo.Selecte...

学习Spring Boot:(十二)Mybatis 中自定义枚举转换器

https://blog.wuwii.com/springboot-12.html 前言 在 Spring Boot 中使用 Mybatis 中遇到了字段为枚举类型,数据库存储的是枚举的值,发现它不能自动装载。 解决 内置枚举转换器 MyBatis内置了两个枚举转换器分别是:org.apache.ibatis.type.EnumTypeHandler 和 ...

高效的数据压缩编码方式 Protobuf

一. protocol buffers 是什么? Protocol buffers 是一种语言中立,平台无关,可扩展的序列化数据的格式,可用于通信协议,数据存储等。 Protocol buffers 在序列化数据方面,它是灵活的,高效的。相比于 XML 来说,Protocol buffers 更加小巧,更加快速,更加简单。一旦定义了要处理的数据的数据结构之...

SerializeField和HideInInspector

     在Unity中,一个变量为公有类型,但是呢你不想让它显示在属性面板上,这个时候用 [HideInInspector] 这是隐藏的意思,举例:         用了[HideInInspector] 之后         就是这样用的,还有一个 [SerializeField] 是显示的意思,它用在你的私有变量想在属性面板出现的情况下,这里不演示了...

深入理解Enum(枚举类)

Java 枚举 为什么要引入枚举类 一个小案例 你写了一个小程序,不过好久不用了,突然有一天,你想使用一下它。程序要想正确运行,需要将今天星期几存到数据库里。这个时候,你开始犯难了。 当初的你还很年轻,不懂程序界的险恶,设计这个程序的时候,傻不拉几把这个字段设计为int类型的,用0代表周日,1代表周一。。。6代表周六,添加的时候就setWeekday(0)...