iOS:枚舉在組件化工程中的使用注意點(diǎn)

某天,開(kāi)發(fā)小王:來(lái)幫忙看下,為什么我的按鈕樣式變了,我什么代碼都沒(méi)改。源碼調(diào)試沒(méi)問(wèn)題,二進(jìn)制組件工程有問(wèn)題。

看了下代碼,按鈕的生成是一個(gè)工廠方法,通過(guò)傳入不同的枚舉值(比如:BUTTON_STYLE_DELETE)返回不同的按鈕樣式,方法的實(shí)現(xiàn)在一個(gè)基礎(chǔ)組件A中,出問(wèn)題的組件B依賴(lài)了這個(gè)基礎(chǔ)組件A。其中枚舉定義示例如下:

typedef NS_ENUM(NSUInteger, BUTTON_STYLE) {
    BUTTON_STYLE_DEFAULT,//默認(rèn)
    BUTTON_STYLE_FAV ,//收藏
    BUTTON_STYLE_DELETE,//刪除
    BUTTON_STYLE_ADD,//加
};

以上代碼可能出問(wèn)題的也就是枚舉值了,查看了下這個(gè)基礎(chǔ)組件的提交記錄后發(fā)現(xiàn) BUTTON_STYLE_DELETE前面被插入了新的值 BUTTON_STYLE_BACK

typedef NS_ENUM(NSUInteger, BUTTON_STYLE) {
   BUTTON_STYLE_DEFAULT,//默認(rèn)
   BUTTON_STYLE_FAV ,//收藏
   BUTTON_STYLE_BACK,//返回
   BUTTON_STYLE_DELETE,//刪除
   BUTTON_STYLE_ADD,//加
};

造成在組件A中 BUTTON_STYLE_DELETE值變成了3,而組件B中的 BUTTON_STYLE_DELETE值還是2。枚舉值在組件B被編譯成靜態(tài)庫(kù)時(shí)就已經(jīng)被賦值了,還是之前的值。所以獲取到的按鈕樣式自然有問(wèn)題。所以在組件化工程中特別是公共組件對(duì)枚舉做增刪操作時(shí)一定不要改變?cè)械闹?。在組件化工程中除了枚舉這種編譯期賦值,還有在預(yù)編譯期賦值的, 如宏定義也是經(jīng)常出問(wèn)題的地方,比如公共組件更改了宏定義的值,依賴(lài)的組件也需要重新打包。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容