iOS:枚举在组件化工程中的使用注意点

某天,开发小王:来帮忙看下,为什么我的按钮样式变了,我什么代码都没改。源码调试没问题,二进制组件工程有问题。

看了下代码,按钮的生成是一个工厂方法,通过传入不同的枚举值(比如:BUTTON_STYLE_DELETE)返回不同的按钮样式,方法的实现在一个基础组件A中,出问题的组件B依赖了这个基础组件A。其中枚举定义示例如下:

typedef NS_ENUM(NSUInteger, BUTTON_STYLE) {
    BUTTON_STYLE_DEFAULT,//默认
    BUTTON_STYLE_FAV ,//收藏
    BUTTON_STYLE_DELETE,//删除
    BUTTON_STYLE_ADD,//加
};

以上代码可能出问题的也就是枚举值了,查看了下这个基础组件的提交记录后发现 BUTTON_STYLE_DELETE前面被插入了新的值 BUTTON_STYLE_BACK

typedef NS_ENUM(NSUInteger, BUTTON_STYLE) {
   BUTTON_STYLE_DEFAULT,//默认
   BUTTON_STYLE_FAV ,//收藏
   BUTTON_STYLE_BACK,//返回
   BUTTON_STYLE_DELETE,//删除
   BUTTON_STYLE_ADD,//加
};

造成在组件A中 BUTTON_STYLE_DELETE值变成了3,而组件B中的 BUTTON_STYLE_DELETE值还是2。枚举值在组件B被编译成静态库时就已经被赋值了,还是之前的值。所以获取到的按钮样式自然有问题。所以在组件化工程中特别是公共组件对枚举做增删操作时一定不要改变原有的值。在组件化工程中除了枚举这种编译期赋值,还有在预编译期赋值的, 如宏定义也是经常出问题的地方,比如公共组件更改了宏定义的值,依赖的组件也需要重新打包。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,342评论 0 3
  • 作为一个合格的开发者,不要只满足于编写了可以运行的代码。而要了解代码背后的工作原理;不要只满足于自己的程序...
    六个周阅读 8,529评论 1 33
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,869评论 2 9
  • 其实我们很多时候都很无语,无法避免的商业化无孔不入。我们在校园的小生意,如果所有商...
    仓楊阅读 566评论 0 0
  • 我们每个人来到人世间,都扮演着一种角色,那就是探险家,冒着自己的生命危险探险着生老病死的人生,这是一种危险指数超高...
    吾金堪布阅读 85评论 0 0