1.在C語言
中我們用到一串有關聯,被當作判斷狀態依據的常量時,會用到枚舉Enum,其使用:
enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };默認情況Mon = 0;后面依次加1,也可以自己指定:enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };這樣Mon = 1;后面依然依次加1.2.在Objective-C
中,因為版本,有幾種實用枚舉的樣式。
使用C語言樣式:
enum test{ t1, t2 }tt; switch (tt) { case t1: NSLog(@"t1"); break; case t2: NSLog(@"t2"); break; default: break; }感覺用起來很不爽,那么:typedef enum{ t1, t2 }test; test tt; switch (tt) { case t1: NSLog(@"t1"); break; case t2: NSLog(@"t2"); break; default: break; }還是不夠OC:typedef NS_ENUM(NSInteger,test){ t1, t2 }; test tt; switch (tt) { case t1: NSLog(@"t1"); break; case t2: NSLog(@"t2"); break; default: break; }嗯,這回就非常OC了,推薦這樣使用3.按位位移枚舉
typedef NS_ENUM(NSInteger,test){ t1 = 1, //1 對應2進制 1 左移低位0補齊 t2 = 1<<1, //2 10 t3 = 1<<2, //4 100 t4 = 1<<3, //8 1000 t5 = 1<<4, //16 10000 t6 = 1<<5 //32 100000 }; NSLog(@"t1 = %ld",t1); NSLog(@"t2 = %ld",t2); NSLog(@"t3 = %ld",t3); NSLog(@"t2 = %ld",t4); NSLog(@"t3 = %ld",t5); NSLog(@"t3 = %ld",t6);輸出結果為1,2,4,8,16,32 。那么什么情況用這種枚舉呢?先上代碼:
typedef NS_ENUM(NSInteger,test){ t1 = 1, //1 對應2進制 1 左移低位0補齊 t2 = 1<<1, //2 10 t3 = 1<<2, //4 100 t4 = 1<<3, //8 1000 t5 = 1<<4, //16 10000 t6 = 1<<5 //32 100000 }; test tt= (t3|t6); if((tt&t1)){ NSLog(@"有t1"); }else{ NSLog(@"沒有t1"); } if((tt&t3)){ NSLog(@"有t3"); }else{ NSLog(@"沒有t3"); } if((tt&t5)){ NSLog(@"有t5"); }else{ NSLog(@"沒有t5"); } if((tt&t6)){ NSLog(@"有t6"); }else{ NSLog(@"沒有t6"); }輸出結果為:2017-02-10 11:56:01.243 UIKitLearn[2460:69675] 沒有t12017-02-10 11:56:01.243 UIKitLearn[2460:69675] 有t32017-02-10 11:56:01.243 UIKitLearn[2460:69675] 沒有t52017-02-10 11:56:01.244 UIKitLearn[2460:69675] 有t6當我們對于一個事物的一種屬性要用多種狀態描述時,比如一行字,是 3號黑體有下劃線的,就應該這樣 3號|黑體|下劃線,用或的方式集成多種狀態,再判斷某種狀態有沒有。
新聞熱點
疑難解答