//返回字符串所占用的尺寸.
-(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;
}
一、狀態(tài)和選項的區(qū)別(states and options)
在使用enum之前,我認(rèn)為,區(qū)分一下狀態(tài)和選項的概念是很必要的。
(1)狀態(tài)
同時只能有一種,如“YES”,"ERROR",不可能同時存在OK和Error.
(2)選項
同時可以有一種或一種一上,如App可以同時支持橫屏和豎屏,橫屏和豎屏在這個時候就是“屏幕方向”的兩種不同選項
接下來,我們看看,如何用枚舉定義狀態(tài)和選項。
二、enum與狀態(tài)(states)
不好的做法,我們經(jīng)??吹?/p>
#define STATE_OK 0
#define STATE_ERROR 1
#define STATE_UNKNOW 2
//直接用int型變量接收
int STATE = STATE_UNKNOW;
這種做法有如下的”不恰當(dāng)“:
(1)宏定義沒有類型約束,只是單純的替換
(2)無法限制狀態(tài)的所有情況,如果,將STATE 賦值成3,程序就會出錯,找不到匹配的狀態(tài),編譯器會對“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;
}
}