iOS高效开发--正确使用枚举

2017-06-12  本文已影响38人  Little_Shaun

//返回字符串所占用的尺寸.
-(CGSize)sizeWithFont:(UIFont *)font WithStr:(NSString *)content AndmaxSize:(CGSize)maxSize
{
NSDictionary *attrs = @{NSFontAttributeName : font};
return [content boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size;
}

一、状态和选项的区别(states and options)
在使用enum之前,我认为,区分一下状态和选项的概念是很必要的。

(1)状态
同时只能有一种,如“YES”,"ERROR",不可能同时存在OK和Error.
(2)选项
同时可以有一种或一种一上,如App可以同时支持横屏和竖屏,横屏和竖屏在这个时候就是“屏幕方向”的两种不同选项

接下来,我们看看,如何用枚举定义状态和选项。

二、enum与状态(states)
不好的做法,我们经常看到

#define STATE_OK 0
#define STATE_ERROR 1
#define STATE_UNKNOW 2

//直接用int型变量接收
int STATE = STATE_UNKNOW;

这种做法有如下的”不恰当“:
(1)宏定义没有类型约束,只是单纯的替换
(2)无法限制状态的所有情况,如果,将STATE 赋值成3,程序就会出错,找不到匹配的状态,编译器会对“STATE = 3”,提出警告。

正确的做法:

typedef enum _TTGState{
    TTGStateOK = 0,
    TTGStateError,
    TTGStateUnkonw
}TTGState;

使用如下:

- (void)dealWithState:(TTGState)state
{
    switch (state) {
        case TTGStateOK:
            NSLog(@"1");
            break;
        case TTGStateError:
            NSLog(@"2");
            break;
        case TTGStateUnkonw:
            NSLog(@"3");
            break;
        default:
            break;
    }
}
上一篇下一篇

猜你喜欢

热点阅读