回顾 2020
在去年的《一次关于 Swift 在 iOS 生态圈里的现状调研》一文中, 我们分析了整个大环境的现状,在文章发表后得到了大家的广泛关注,时隔一年,我们再来看看有什么变化吧?
Swift 语言
版本变化
首先从去年的 5.2 版本,到现在即将发布 5.4 版本,Swift 经历了 2 个小的版本变化,分别是 5.3 和 5.4
其中 5.3 版本给出了以下几个语言特性:
SE-0276[1]:catch 语句在捕获 error 的时候,可以更加灵活自由,例如一次捕获多个 error 或者对 error 的值进行绑定。
SE-0279[2]:支持多个尾随闭包,这个特性主要是为 SwiftUI 准备的。
SE-0266[3]:enum 支持 comparable 协议,并根据顺序自行决定大小
SE-0269[4]:在某些场景下可以避免 self 关键字的声明
SE-0281[5]:通过
@main
关键字定位程序入口SE-0267[6]:在函数的泛型和扩展中就可以使用包含
where
关键字的语句SE-0280[7]:protocol witness 匹配模型在枚举值中的加强
SE-0277[8]:新增 Float16 的数据类型
SE-0268[9]:didSet 方法优化和语义更新
首先在 SE-0271[10] 中,Swift Package Manager 在资源文件的支持上有了进一步的提升,同时,在 SE-0278[11] 中,SPM 对本地化资源的支持也有了改进,而且在 SE-0272[12] 中,SPM 终于支持了二进制形式的组件。在 SE-0273[13],SPM 允许我们对特定的 target 进行特殊的依赖配置。
其中在未来的 5.4 版本又新增了以下几个语言特性:
SE-0287[14]:提升了隐式成员表达式的类型推断能力。
SE-0284[15]:在函数中可以定义多个可变参数。
SE-0289[16]:在 5.1 就公布的 Function Builder 功能正式命名为 Result Builder,并在原先的基础上进行了完善。
SR-10069[17]:嵌套函数支持重载
SE-0294[18]:新增 executable 类型的 target,使得 SE-0281[19] 新增的特性更易于使用。
property wrapper 除了可以作为属性外,还可以在函数里作为本地变量。
On the road to Swift 6
在 2021 年的 1 月,Swift 社区的 Ted Kremenek[20],他的另一个身份是 Manager of the Languages and Runtime Team @Apple,在 swift.org forum[21] 公布了一则名为《On the road to Swift 6》[22]的文章
在这篇文章里,提到了一些对 Swift 6 的规划,从大方向来说,Ted 提了三点:
加速整个 Swift 软件生态的发展:包含兼容更多的开发平台,简化软件的安装部署和大力发展各类工具库。
打造极致的开发体验:包括更快的构建速度,更好用的调试工具,更灵敏的代码补全和更丰富的诊断信息。
结合开发者的反馈进一步发展语言特性:包括完善 API 的设计,拓展其在底层系统,服务器和机器学习方面的应用场景,同时对某些主流的语言特性提供支持,例如并发特性和内存相关的特性。
同时 Swift 的核心团队也发生了一些变化,Saleem Abdulrasool[23] 和 Tom Doron[24] 作为新成员加入到核心团队,而 [Dave Abrahams] 则退出了核心团队。
这里稍微提一下的,Tom 是 SwiftNIO 的核心开发,同时在 SSWG(Swift Server Work Group) 项目中也是主要的发起者,而 Saleem 是 Swift to Windows 的核心发起者,这两个变动结合着最开始的三个大方向,可以看出整个核心团队是言行一致的。
另外关于 Swift 6 的公布时间,Ted 的原话是这样的:
Instead of announcing a specific timeline for “Swift 6”, the plan is for the community to be a part of seeing these efforts progress, with focused efforts and goals, and we release Swift 6 when those efforts culminate.
所以这样看来,Swift 6 还是有一段时间才能与我们见面,毕竟人家说了 when those efforts culminate!
那反过来看,Swift 5 还将会是近期使用的主要版本。(PS:希望今年的 WWDC 21 不要被打脸)
技术社区
语言排行榜
同样我们来看一看编程语言排行榜 TIOBE[25] 和 PYPL[26] 的情况,在 TIOBE 的排行榜中,Swift 在今年的排名是第 15 名,而 Objective-C 已经彻底排在了 20 名之外了。
而在 PYPL 的排行榜中,Swift 和 Objective-C 的热度还是较为接近的。
从社区的语言排行榜来看,虽然乍一看,感觉还是 Swift 和 Objective-C 共存的大环境,但其实背后也反映出,Swift 已经被大部分开发者所接受了。
社区活跃度
同样通过 GitHut 2.0[27] 这个工具对 GitHub 进行分析。
下面四张图的 Y 轴分别代表了 Pull Requests ,Pushes,Stars,Issues 的数量,蓝色的线代表 Objective-C ,浅橙色的线代表 Swift。
可以发现,在 Pull Request 方面,Swift 占比约 0.595%,而 Objective-C 占比约 0.335%
同时 Push 方面,Swift 占比约 0.476%,而 Objective-C 占比约 0.310%
在 Stars 方面,Swift 占比约 2.107%,而 Objective-C 占比约 1.067%
在 Issue 方面,Swift 占比约 0.767%,而 Objective-C 占比约 0.607%
总的来看,在 GitHub 的大环境中,社区中的开发者还是持续看好 Swift,也相对更加活跃,尤其在 Star 这项指标上可以明显看出,它高出了 Objective-C 近一倍!
商用 SDK 的技术选型
在今年我们还发现了一些有意思的现象,不少商用 SDK 也开始了 Swift 的迁移。
例如国外的 Nordic Semiconductor[28] 公司,它是北欧的一个半导体公司,主营蓝牙芯片,在业界属于领先地位,不少使用它家芯片的团队会涉及到固件升级问题,无线的升级方案需要进行固件传输、校验、升级管理等动作,而这些动作都得使用它们家提供的 SDK 来完成。
在 Nordic Semiconductor 的 GitHub 页面[29]上,我们可以看到目前提供的商用 SDK 中,iOS 端只有 Swift 版本[30],而 Android 端只有 Java 版本[31]。
同时像 Google 的 Firebase 在其 RoadMap[32] 里也明确指出了将更加关注 S