Objective-C——OC中枚举的使用

本文介绍了Objective-C中枚举的使用,包括用枚举表示操作状态、状态组合使用以及在switch语句中的应用。枚举相比宏定义和const变量更简洁,并能避免标识符冲突。同时,使用枚举在switch语句中可以方便地进行状态检查,当新增状态时,编译器会提示未处理的新状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OC中枚举的使用


———- android培训java培训、期待与您交流! ———-


前言

由于Objective-C是C语言的超集,所以在OC程序中一般的常量表示也有宏定义   以及const 变量类型 变量 和枚举等形式,这里我们介绍些枚举的几种适用场合

用枚举表示一个操作的不同状态

我们随便举个例子,比如说你想跟别人通过短信息聊天而需要发送信息给对方,这个时候我们需要一组该动作相关联的状态码来表示我们发送信息这一操作中的各个状态(没发送、 发送中、和发送完 我们暂且就分为这三个简单的状态)从技术层面上来说我们的确可以采用宏定义或者是const变量的形式

  • 先来说下宏定义
// 宏定义
#define MESSAGE_STATE_DISSEND  0
#define MESSAGE_STATE_SENDING  1
#define MESSAGE_STATE_SENDED  2
// 枚举
typedef enum MESSAGE_STATE{
    MESSAGE_STATE_DISSEND,
    MESSAGE_STATE_SENDING,
    MESSAGE_STATE_SENDED,
}MESSAGE_STATE;

从上面给出的代码说明了很重要的一点:

宏定义的形式没有枚举简洁

而且我们都知道:
宏定义本身在开发中有这样的问题,就是不同的开发者有可能在彼此不知道的情况下定义了相同的宏并且值可能不同,这个时候编译器并不会报错和产生警告信息!这是不能容忍的!

  • 在看const
// oneclass.m
static NSNumber *const MESSAGE_STATE_DISSEND = @0;
static NSNumber *const MESSAGE_STATE_SENDING = @1;
static NSNumber *const MESSAGE_STATE_SENDED = @2;

从代码的表现形式我们知道使用static const的形式解决了状态常量被重写的问题但是很明显他没有枚举简洁

用枚举编译器会自动为枚举分配一个独有的编号从0开始依次递增1,而且采用枚举更能体现这是一组相关联的状态


状态组合使用枚举

我们在定义一组可自由拼凑状态的时候是用枚举是更为合适的,我来举个简单的例子:
假如我们要为生产手机挑选一组功能怎么做呢?

// 定义枚举
typedef enum NEW_PHONE_MODULE{
    NEW_PHONE_MODULE_PLAY_MUSIC = 1 << 0,
    NEW_PHONE_MODULE_RECORDING = 1 << 1,
    NEW_PHONE_MODULE_SEND_MESSAGE = 1 << 2, 
}NEW_PHONE_MODULE;
NEW_PHONE_MODULE new_phone_module = NEW_PHONE_MODULE_PLAY_MUSIC |
NEW_PHONE_MODULE_RECORDING |  NEW_PHONE_MODULE_SEND_MESSAGE;

// 使用组合(这里当手机具有播放音乐的功能就打印信息)

if(new_phone_module & NEW_PHONE_MODULE_PLAY_MUSIC)
{
    NSLog(@"新手机有播放音乐的功能!");
}

switch中使用枚举

MESSAGE_STATE state = MESSAGE_STATE_SENDING;
switch (state)
{
    MESSAGE_STATE_DISSEND:
        NSLog(@"未发送");
        break;
    MESSAGE_STATE_SENDING:
        NSLog(@"发送中");
        break;
    MESSAGE_STATE_SENDED:
        NSLog(@"已发送");
        break;
}

这里需要注意的是,不要有switch语句中的default分支,因为一旦我们添加新的状态了在switch语句中没处理的话在没有default情况下编译器就能够发现,而有了default分支他就会自动处理该状态这是我们不愿意看到的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值