枚举表示状态,选项,状态码

之前也没看明白枚举的这个用法,百度了好久,然后发现有篇文章讲的还不错,地址下面给出..

枚举只是一种常量命名方式。某个对象所经历的各种状态就可以定义为一个简单的枚举集(enumeration set)。比如说,可以用下列枚举表示“套接字连接”(socket connection)的状态:
enum EOCConnectionState {
    EOCConnectionStateDisconnected,
    EOCConnectionStateConnecting,
    EOCConnectionStateConnected,
};

由于每种状态都用一个便于理解的值来表示,所以这样写出来的代码更易读懂。编译器会为枚举分配一个独有的编号,从0开始,每个枚举递增1。实现枚举所用的数据类型取决于编译器,不过其二进制位(bit)的个数必须能完全表示下枚举编号才行。在前例中,由于最大编号是2,所以使用1个字节的char类型即可。

然而定义枚举变量的方式却不太简洁,要依如下语法编写:
enum EOCConnectionState state = EOCConnectionStateDisconnected;

若是每次不用敲入enum而只需写EOCConnectionState就好了。要想这样做,则需使用typedef关键字重新定义枚举类型:
enum EOCConnectionState {
    EOCConnectionStateDisconnected,
    EOCConnectionStateConnecting,
    EOCConnectionStateConnected,
};

typedef enum EOCConnectionState EOCConnectionState;

现在可以用简写的EOCConnectionState来代替完整的enum EOCConnectionState了:

EOCConnectionState state = EOCConnectionStateDisconnected;

C++11标准修订了枚举的某些特性。其中一项改动是:可以指明用何种“底层数据类型”(underlying type)来保存枚举类型的变量。这样做的好处是,可以向前声明枚举变量了。若不指定底层数据类型,则无法向前声明枚举类型,因为编译器不清楚底层数据类型的大小,所以在用到此枚举类型时,也就不知道究竟该给变量分配多少空间。

指定底层数据类型所用的语法是:
enum EOCConnectionStateConnectionState : NSInteger { /* ... */ };

上面这行代码确保枚举的底层数据类型是NSInteger。也可以在向前声明时指定底层数据类型:

enum EOCConnectionStateConnectionState : NSInteger;

还可以不使用编译器所分配的序号,而是手工指定某个枚举成员所对应的值。语法如下:
enum EOCConnectionStateConnectionState {
    EOCConnectionStateDisconnected = 1,
    EOCConnectionStateConnecting,
    EOCConnectionStateConnected,
};

上述代码把EOCConnectionStateDisconnected的值设为1,而不使用编译器所分配的0。如前所述,接下来几个枚举的值都会在上一个的基础上递增1。比如说,EOCConnectionState-Connected的值就是3。

还有一种情况应该使用枚举类型,那就是定义选项的时候。若这些选项可以彼此组合,则更应如此。只要枚举定义得对,各选项之间就可通过“按位或操作符”(bitwise OR operator)来组合。例如,iOS UI框架中有如下枚举类型,用来表示某个视图应该如何在水平或垂直方向上调整大小:
enum UIViewAutoresizing {
    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5,
}

每个选项均可启用或禁用,使用上述方式来定义枚举值即可保证这一点,因为在每个枚举值所对应的二进制表示中,只有1个二进制位的值是1。用“按位或操作符”可组合多个选项,例如:UIViewAutoResizingFlexibleWidth| UIViewAutoresizingFlexibleHeight。用“按位与操作符”(bitwise AND operator)即可判断出是否已启用某个选项:
enum UIViewAutoresizing resizing =
    UIViewAutoresizingFlexibleWidth |
    UIViewAutoresizingFlexibleHeight;
if (resizing & UIViewAutoresizingFlexibleWidth) {
       // UIViewAutoresizingFlexibleWidth is set
}

 还有关于设备显示方向的枚举用法,小伙伴们请移步这里:http://book.2cto.com/201404/42076.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HttpStatus类是Spring框架中定义的一个枚举类,它封装了HTTP响应状态码及其对应的原因短语。下面是HttpStatus类中所有的状态码: - 1xx(信息类):表示接收的请求正在处理。 - 100 CONTINUE:继续请求,一般在发送POST请求时,已经发送了HTTP header之后服务端将返回此信息,表示确认,之后发送具体参数信息。 - 101 SWITCHING_PROTOCOLS:切换协议,表示正在采用的协议将被更改。 - 102 PROCESSING:正在处理请求,后续响应将包含具体的结果。 - 103 EARLY_HINTS:提示信息,可让客户端在不等待响应的情况下开始预加载资源。 - 2xx(成功):表示请求已经被成功接收、理解、接受。 - 200 OK:请求成功。 - 201 CREATED:已创建。成功请求并创建了新的资源。 - 202 ACCEPTED:已接受。请求已经被接受,但是还未进行处理。 - 203 NON_AUTHORITATIVE_INFORMATION:非授权信息。请求成功,但返回的meta信息不在原始的服务器,而是一个副本。 - 204 NO_CONTENT:无内容。服务器成功处理,但未返回内容。一般用于删除操作。 - 205 RESET_CONTENT:重置内容。服务器成功处理,但未返回内容。与204响应不同,此响应要求请求者重置文档视图。 - 206 PARTIAL_CONTENT:部分内容。服务器成功处理了部分GET请求。 - 207 MULTI_STATUS:多种状态。服务器返回多种状态。 - 208 ALREADY_REPORTED:已报告。服务器已经接收到请求,但是尚未完成处理。 - 226 IM_USED:使用了。服务器已经完成了请求的处理。 - 3xx(重定向):表示需要客户端进一步操作才能完成请求。 - 300 MULTIPLE_CHOICES:多种选择。请求的资源有多种表示方式,服务器可以根据请求者的首选项进行返回。 - 301 MOVED_PERMANENTLY:永久移动。请求的资源已被永久移动到新URI,返回信息会包含新的URI。 - 302 FOUND:临时移动。请求的资源已被临时移动到新URI,返回信息会包含新的URI。 - 303 SEE_OTHER:查看其它地址。请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码。 - 304 NOT_MODIFIED:未修改。请求的资源未修改,可以使用缓存版本。 - 305 USE_PROXY:使用代理。请求者只能使用代理访问请求的资源。 - 306 UNUSED:已经被废弃的HTTP状态码。 - 307 TEMPORARY_REDIRECT:临时重定向。请求的资源已被临时移动到新URI,返回信息会包含新的URI。 - 308 PERMANENT_REDIRECT:永久重定向。请求的资源已被永久移动到新URI,返回信息会包含新的URI。 - 4xx(客户端错误):表示客户端提交的请求有错误。 - 400 BAD_REQUEST:请求错误。服务器不理解请求的语法。 - 401 UNAUTHORIZED:未授权。请求要求身份验证,验证失败。 - 402 PAYMENT_REQUIRED:需要付款。保留,将来使用。 - 403 FORBIDDEN:禁止访问。服务器拒绝请求。 - 404 NOT_FOUND:未找到。服务器找不到请求的资源。 - 405 METHOD_NOT_ALLOWED:方法不允许。请求中指定的方法不被允许。 - 406 NOT_ACCEPTABLE:不可接受。服务器无法根据客户端请求的内容特性完成请求。 - 407 PROXY_AUTHENTICATION_REQUIRED:要求代理身份验证。请求者必须授权使用代理。 - 408 REQUEST_TIMEOUT:请求超时。请求超时,服务器没有进行任何操作。 - 409 CONFLICT:冲突。由于请求的资源存在冲突,请求无法完成。 - 410 GONE:已经不存在的资源。请求的资源已被永久删除。 - 411 LENGTH_REQUIRED:需要内容长度。服务器不接受不含内容长度标头字段的请求。 - 412 PRECONDITION_FAILED:先决条件失败。服务器不满足请求者在请求中设置的其中一个先决条件。 - 413 PAYLOAD_TOO_LARGE:有效载荷过大。请求的有效载荷超过服务器要处理的最大限制。 - 414 URI_TOO_LONG:URI过长。请求的URI超过服务器能够解释的长度,因此服务器拒绝对该请求提供服务。 - 415 UNSUPPORTED_MEDIA_TYPE:不支持的媒体类型。请求的格式不受请求页面的支持。 - 416 RANGE_NOT_SATISFIABLE:范围不符合要求。由于请求的范围无效,请求无法满足。 - 417 EXPECTATION_FAILED:期望失败。服务器未满足"期望"请求标头字段的要求。 - 418 I_AM_A_TEAPOT:我是茶壶。服务器拒绝尝试用壶煮咖啡。 - 421 MISDIRECTED_REQUEST:请求错误。服务器无法识别请求的方案。 - 422 UNPROCESSABLE_ENTITY:无法处理的实体。请求格式正确,但是由于含有语义错误,无法响应。 - 423 LOCKED:被锁定。当前资源被锁定。 - 424 FAILED_DEPENDENCY:依赖失败。请求失败,请求所依赖的另一个请求也失败。 - 425 TOO_EARLY:太早。请求头中指定的时间戳与服务器不符。 - 426 UPGRADE_REQUIRED:需要升级。客户端应当切换到TLS/1.0。 - 428 PRECONDITION_REQUIRED:要求先决条件。该请求要求客户端提供先决条件。 - 429 TOO_MANY_REQUESTS:过多的请求。请求过多,服务器无法处理。 - 431 REQUEST_HEADER_FIELDS_TOO_LARGE:请求头字段过大。请求头超出服务器的限制。 - 451 UNAVAILABLE_FOR_LEGAL_REASONS:因法律原因不可用。该请求因法律原因不可用。 - 5xx(服务器错误):表示服务器在处理请求的过程中发生了错误。 - 500 INTERNAL_SERVER_ERROR:内部服务器错误。请求未完成。服务器遇到错误,无法完成请求。 - 501 NOT_IMPLEMENTED:未实现。服务器不支持请求的功能。 - 502 BAD_GATEWAY:错误的网关。服务器作为网关或代理,从上游服务器收到无效响应。 - 503 SERVICE_UNAVAILABLE:服务不可用。服务器当前无法处理请求或请求过载。 - 504 GATEWAY_TIMEOUT:网关超时。服务器作为网关或代理,但是没有及时从上游服务器收到请求。 - 505 HTTP_VERSION_NOT_SUPPORTED:HTTP版本不受支持。服务器不支持请求的HTTP协议的版本。 - 506 VARIANT_ALSO_NEGOTIATES:变体也协商。服务器有一个内部配置错误:对请求的透明内容协商导致循环引用。 - 507 INSUFFICIENT_STORAGE:存储不足。服务器无法完成存储请求所需的内容。 - 508 LOOP_DETECTED:检测到循环。服务器检测到无限循环。 - 510 NOT_EXTENDED:不扩展。获取资源所需的策略并没有被满足。 - 511 NETWORK_AUTHENTICATION_REQUIRED:需要网络认证。客户端需要进行身份验证才能获得网络访问权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值