狐友技术团队来源
搜狐技术产品
前言
随着Swift5.0版本release之后,abi也变得逐渐稳定起来,加上Swift语法简洁、安全、语法糖丰富等特性,越来越多的开发者们开始拥抱、学习Swift。对于拥有丰富开发经验的开发者们来说,学习一门新的语言是非常容易的,我们可以非常快的掌握新语言的语法、API,非常快速的进行开发,但作为一名优秀的开发者学会使用语法是不够的,我们要想真正的精通一门语言,需要的是既要知其然也要知其所以然,我们不仅要掌握它的使用,更要知道它的原理,知道现象背后的本质。
枚举
在Swift中枚举不仅仅只是一个用来区分类型的常量了,枚举的功能被大大的加强。枚举可以设置原始值,添加关联值,甚至可以添加计算属性(不能添加存储属性),定义方法,实现协议,其功能仅次于一个class对象了,那么Swift的枚举到底是怎样实现这些功能的呢?我们今天就将通过分析内存布局、查看SIL源码等方式来探索一下枚举的底层到底是什么样子的。
0x1准备
??1.SIL
(SwiftIntermediateLanguage)
Swift语言和OC语言一样,它们的编译都是构建在LLVM架构上的,如同OC的编译过程先被LLVM的编译器前端clang编译成c/c++,再被编译成LLVM后端语言LLVMIR一样,Swift也有着类似的设计,Swift会先经过一个Swift特有的编译器前端(Swift