//返回字符串所占用的尺寸.
-(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;
}
}