NS_ENUM枚舉和Block的巧妙搭配

iOS的枚舉NS_ENUM,對于我們開發(fā)人員來說,再熟悉不過了,下面來說說幾種不同的寫法.

比如,我們有一個菜單類型的枚舉,根據(jù)菜單類型的不同,處理的事情也不一樣.

/**
 菜單類型
 */
typedef NS_ENUM(NSInteger, XXMenuType) {
    XXMenuTypeA = 0,
    XXMenuTypeB,
    XXMenuTypeC,
};

@property (nonatomic, assign) XXMenuType currentType;

一懒构、枚舉 + if else

比較常見的通過if else做條件匹配的寫法

if(_currentType == XXMenuTypeA){
     
}else if (_currentType == XXMenuTypeB){
    
}else if (_currentType == XXMenuTypeC){
       
}

但是當開發(fā)的后期,枚舉增加了新的類型XXMenuTypeD,如果沒有再進行else if那邏輯判斷就出現(xiàn)了遺漏.或者說最后判斷使用的是else,那就將多種類型都歸入了else邏輯分支,這是我們不希望發(fā)生的.

二、與switch case配套使用

當枚舉和switch case搭配使用時,不要寫default.

switch (_currentType) {
        case XXMenuTypeA:
            //logic A
            break;
        case XXMenuTypeB:
            //logic B
            break;
        case XXMenuTypeC:
            //logic C
            break;
}

這是如果新增了XXMenuTypeD,Xcode會通過warning的方式顯示的提醒我們還有類型沒有處理,要我們加上case.

warning.png
switch case比起if else更一目了然.

三扩氢、巧妙搭配Block

借助Block + Switch Case + function封裝一個使用

//.h文件中
typedef void (^menuTypeBlock) (void);

- (void)matchMenuTypeA:(menuTypeBlock)blockA menuTypeB:(menuTypeBlock)blockB menuTypeC:(menuTypeBlock)blockC;
//.m文件
- (void)matchMenuTypeA:(menuTypeBlock)blockA menuTypeB:(menuTypeBlock)blockB menuTypeC:(menuTypeBlock)blockC{
    switch (_currentType) {
        case XXMenuTypeA:
            !blockA ? :blockA();
            break;
        case XXMenuTypeB:
            !blockB ? :blockB();
            break;
        case XXMenuTypeC:
            !blockC ? :blockC();
            break;
    }
}
//調(diào)用方
[obj matchMenuTypeA:^{
        //code
} menuTypeB:^{
        //code
} menuTypeC:nil];

僅有一處使用時這樣寫代碼,會覺得有點繁瑣,增加了代碼量卻沒有太大的用處.
但當有多處使用,在增加了一種枚舉類型時,只要我們修改了這個方法名,那么外部使用到該function的位置Xcode都會顯示為紅色的error錯誤.

build Error

這樣一來就再也不會出現(xiàn)該枚舉的邏輯遺漏了,甚至有點函數(shù)式編程內(nèi)味兒了? 畢竟command + B爆紅的 errorwarning更讓程序員操心:(

base:https://zhuanlan.zhihu.com/p/31204326

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市狡恬,隨后出現(xiàn)的幾起案子囊颅,更是在濱河造成了極大的恐慌溜嗜,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巢墅,死亡現(xiàn)場離奇詭異诸狭,居然都是意外死亡,警方通過查閱死者的電腦和手機君纫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門驯遇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蓄髓,你說我怎么就攤上這事叉庐。” “怎么了会喝?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵陡叠,是天一觀的道長玩郊。 經(jīng)常有香客問我,道長枉阵,這世上最難降的妖魔是什么译红? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮兴溜,結(jié)果婚禮上侦厚,老公的妹妹穿的比我還像新娘。我一直安慰自己拙徽,他們只是感情好刨沦,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膘怕,像睡著了一般想诅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岛心,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天来破,我揣著相機與錄音,去河邊找鬼鹉梨。 笑死讳癌,一個胖子當著我的面吹牛穿稳,可吹牛的內(nèi)容都是我干的存皂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼逢艘,長吁一口氣:“原來是場噩夢啊……” “哼旦袋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起它改,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤疤孕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后央拖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體祭阀,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年鲜戒,在試婚紗的時候發(fā)現(xiàn)自己被綠了专控。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡遏餐,死狀恐怖伦腐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情失都,我是刑警寧澤柏蘑,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布幸冻,位于F島的核電站,受9級特大地震影響咳焚,放射性物質(zhì)發(fā)生泄漏洽损。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一黔攒、第九天 我趴在偏房一處隱蔽的房頂上張望趁啸。 院中可真熱鬧,春花似錦督惰、人聲如沸不傅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽访娶。三九已至,卻和暖如春觉阅,著一層夾襖步出監(jiān)牢的瞬間崖疤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工典勇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留劫哼,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓割笙,卻偏偏與公主長得像权烧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伤溉,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345