国外团队全面拥抱SwiftUI 的六个理由

在 MEGA,我们一直在寻找新的做事方式,以改进我们的工作方式。最近,我们的 MEGA iOS 团队采用了新兴的 SwiftUI 和 Combine 技术。现在我们已经完全接受了它们,绝对不会回头。
那么,为什么 MEGA iOS 团队要转向 SwiftUI 呢?在过渡到 SwiftUI 和 Combine 技术的背后,我们有什么想法?

1. 我们有很棒的第一手体验

2021 年 12 月,我们推出了一项新的照片库功能,以帮助超过 2.4 亿用户在 iOS 14+ 设备上使用和组织他们的相机上传媒体。这个中等规模的项目是使用 SwiftUI 和 Combine 技术构建的。这个项目有一些有趣的挑战;例如,动态网格布局、大型数据集和性能。为了解决这些挑战,我们一直在深入研究 SwiftUI,突破它的界限,跳出框框思考,并探索诸如此类的新技术可以提供的不同可能性。

这种宝贵的第一手经验让我们对 SwiftUI 框架、最佳实践以及我们将如何推进它有了很多见解。

2. SwiftUI 是 iOS 的未来

Apple 在其2019 年全球开发者大会(WWDC 2019)上宣布了 SwiftUI 。此后,Apple iOS 团队一直专注于改进 SwiftUI 框架。现在是 2022 年,如果你问任何 iOS 工程师,他们会告诉你 SwiftUI 是未来。很明显,苹果绝大多数的 UI 工程资源都投入到了 SwiftUI 上。例如,在去年的 WWDC 2021 上,SwiftUI 的会话数量远远超过了 UIKit。活动每天都有 4 到 6 场有关 SwiftUI 更新的会议,总共 17场 SwiftUI 会议,而 UIKit 只有 4 场。

我们似乎很清楚 SwiftUI 是 iOS 的未来,对于那些追随行业趋势的人来说,这可能并不令人惊讶——整个移动世界正在被声明式范式所改造。React Native 和 Flutter 由来已久,原生的 Android Jetpack Compose 也在快速发展。

与命令式编程相比,声明式编程有许多优点:

  • 工程师专注于构建什么而不是如何构建,从而加快开发速度
  • 更简单、更容易理解的语法和良好的可维护性
  • 更好地分离 UI 逻辑和数据管理
  • 不可变的 UI 以确保完整性并避免意外的数据不一致
  • 状态驱动——单一事实来源原则
  • 直观——UI 只是底层状态的反映
  • 清晰的数据流——用户操作改变状态,状态更新 UI。

对于 MEGA,这些因素在决定现在使用 SwiftUI 的过程中发挥了重要作用,我们已经享受到了好处。随着 Apple 将 SwiftUI 推到如此程度,我们认为每个 iOS 团队都需要考虑是否是时候让他们获得 SwiftUI 及其声明式风格的支持。在 MEGA,我们决定现在就使用 SwiftUI,因为好处很明显,而且以后过渡的成本可能很高。

3. 促进创新思维

创新思维和对它的热情为跳出框框思考、寻找巧妙的解决方案、寻找最佳创意和激励我们的工程师打开了新的大门。创新意味着拥抱新技术、及早了解并从中受益。
在 MEGA,我们正在快速发展,目标是成为我们业务领域和技术堆栈的领导者,因此我们一直在研究、试验和探索新的有趣技术。我们对 SwiftUI 的承诺是我们劳动的自然成果,因为它体现了我们对技术创新的态度。

4.它鼓励工程卓越和兴奋

让事情顺利进行总是很容易,但要实现 MEGA 所追求的卓越工程却非常困难。凭借我们从声明式范式中获得的巨大优势,SwiftUI 使我们朝着卓越的工程迈进了一步。
其中一个关键部分是这些技术为我们整个团队注入活力的方式。自从我们开始在 SwiftUI 中构建功能以来,我们的 iOS 工程师一直受到真正的启发和兴奋。不仅仅是 SwiftUI 本身——向新的技术堆栈的转变是一个很好的机会,可以拓宽视野、激发新思维并采用新的最佳实践和工程原则。由于工程 SwiftUI 功能,我们一直在将我们的代码质量提升到一个全新的水平。

5.它有助于吸引顶尖人才

伟大的工程师是充满激情和不断学习的。他们倾向于让自己了解最新技术,因此他们始终可以在自己的领域保持敏锐和相关性。像这样的工程师希望加入像 MEGA 这样处于 iOS 开发前沿的团队,学习新技术。为了吸引和激发这些伟大的工程师,并在内部培育新的工程师,显然我们不能停滞不前。创新和拥抱新技术与吸引顶尖人才齐头并进。
另一方面,在这个瞬息万变的世界中,如果一个团队不转向新一代技术,最终将很难找到热情的工程师在一个陈旧过时的平台上工作。

6. 风险可控

尽管有明显的潜力,但在承诺使用 SwiftUI 和 Combine 构建我们复杂的照片库功能之前,我们必须检查潜在的风险。好消息是,经过三年的演进,SwiftUI 正在变得稳定和成熟。从每年的 WWDC 中我们可以看到,Apple 一直在用 SwiftUI 重写越来越多的自己的应用程序。事实上,我们的一些 iOS 工程师已经从个人项目中获得了 SwiftUI 和 Combine 的经验。考虑到这一点,我们有足够的信心使用 SwiftUI 开发一个大型项目。
从技术角度来看,我们有:

  • UIViewRepresentable
  • UIViewController 可表示
  • UIHostingController

轻松桥接 UIKit 和 SwiftUI。

从架构的角度来看,我们使用的是 Clean Architecture。我们已经将表示逻辑从 UI 逻辑中分离出来,因此在最坏的情况下,我们可以将 SwiftUI 与 UIKit 交换。作为表示逻辑分离的一部分,我们尽量避免使用:

  • @State
  • @Environment
  • @EnvironmentObject

传递和管理视图内部的状态。相反,对于每个视图,我们创建了一个视图模型来负责状态和表示逻辑,使用:

  • @StateObject
  • @ObservedObject

视图只是状态的观察者,它非常愚蠢。UI 视图中的逻辑越少,我们的演示视图模型就越可测试和可重用。

挑战和下一步

说 SwiftUI 到目前为止一直非常顺利是错误的。正如预期的那样,拥有如此复杂的照片库功能,我们确实发现了许多挑战,例如:

  • SwiftUI 和 Combine 都需要彻底改变编程思维方式,并且对于大多数工程师来说是一个相当陡峭的学习曲线
  • SwiftUI 的内存管理并不简单。我们花了很多时间调试和分析,以了解状态如何更新其依赖的视图
  • SwiftUI 仍处于快速发展阶段,我们发现大型数据集存在一些性能问题。例如,由于缺少重用机制, LazyVGrid的性能似乎不如 UICollectionView。

与任何新技术一样,陡峭的学习曲线和最初的生产力问题也是意料之中的。但是,我们相信,随着我们对 SwiftUI 经验的增长,我们的粗糙补丁将会被解决,生产力将会蓬勃发展。我们已经对 SwiftUI 的简单性和效率印象深刻,而且我们知道未来还会有更多。

由于我们在分析 SwiftUI 内存管理和性能以及使用该技术的过程中获得了很多见解,因此我们希望分享我们的发现。我们计划发布一系列关于 MEGA 使用 SwiftUI 的旅程的帖子,所以请关注这个空间。
同时,如果您觉得这听起来令人兴奋,请不要犹豫,申请我们的空缺职位。我们发展迅速,需要优秀的人才加入我们,共同打造行业领先的解决方案和产品。


精品教程推荐


加入我们一起学习SwiftUI

QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com

发表回复