本文主要从我自身的经历出发(从 Swift 1.0 Beta 开始用),从非技术的角度来和大家聊聊,我对 SwiftUI 的看法和预期,以及接下去我围绕着它的一些计划。
半个月前,Apple 在 WWDC 2019 上宣布了 SwiftUI 这个东西,让我非常兴奋。这是继 2014 年 Swift 刚刚宣布那会,第二个让我如此激动的东西。还记得 2014 年那会,Swift 1.0 Beta 刚刚宣布,当晚我就开始学习,一个月后我就开始用它写产品,直到现在…
我的 Swift 学习经历
我这五年用 Swift 的经历,可谓尝尽酸甜苦辣。且不说 Swift 的前三个大版本,经常进行大规模改动,以至于业界有「Swift:从入门到再次入门」的调侃,Xcode 对 Swift 的支持,也是奇差无比,直到最近两三年,才开始稳定了起来。
从「不折腾」的角度来看,我学习并使用 Swift,可以说是毫无联系——然而,我从来就不是抱着「不折腾」的角度去靠近它。学习新事物必然会面临着各种不确定性,也会有各种阵痛期,但是你可以和这个东西一起成长,看着他从稚嫩到成熟的过程,也是一种难得的经历。
说了这些,我想做个小小的总结,那就是:虽然 5 年前我很冲动的第一时间就开始学习并使用 Swift,中间有过各种酸甜苦辣的经历,但是在这个过程中,我经历了很多有趣的事物、认识了很多人,是产品人生的一段美好的经历,可以说是一点也不后悔。
于是,我也很自然的在第一时间开始使用 SwiftUI,尽管它有着 iOS 13 上才能跑的极高门槛,但丝毫不会阻挡我去学习并使用它。
所以,假如你也和我一样,愿意「折腾」它,想要怎么开始?我想根据我折腾 Swift 的经验,可以从这些角度出发。
首先来聊聊,SwiftUI 是什么?
SwiftUI 是什么?
SwiftUI 刚出来时,有不少这样的声音:
「这不是 Apple 版本的 Flutter 么?」
「对这东西的能力表示怀疑。能做复杂的东西吗?」
「iOS 开发 Web 化了吗?」
我一直没有参与这些话题的讨论,而是默默地看了 WWDC 上的开发者视频,看了国内外开发者圈子一些先行者的尝试和实践,看了 Apple 开发者关于 SwiftUI 的一些「内部爆料」。
我想现在的答案已经越来越明确了。
SwiftUI 是一个 Apple 研发了三年的 UI 框架,最大的特色是「声明式 UI」,可以用极少的代码完成以前很多代码才能完成的复杂效果,然而它不仅仅如此。它基于 Combine 这个 Reactive 框架,不仅仅是一个声明式的 UI 框架,也是一个 full-featured 的响应式框架。 打个比喻的话,它是 React+RxJS 的组合。
它也是一整套开发体验。通过 Xcode Previews 的支持,可以说 iOS 第一次有了媲美甚至超越 Web 的开发体验。
举个我最喜欢的特性:以前做 Web 项目时,我特别喜欢 Web 开发中的一些便利特性,hot-reload 这个最基本的特性就不提了,Web 开发过程中最不可取代的就是方便的调试或修改了。当我在 WWDC 视频中看到,Xcode 不仅也能做到这些,而且可以非常方便地完成在 Previews 就能同时看到不同的设备结果时(相当于一个浏览器就能同时调试不同的尺寸),一个大痛点已经被解决。
可以说,SwiftUI 于 Xcode,就像 HTML/CSS/JS 于浏览器的 Developer Tools。没有 Xcode Previews 的话,就发挥不出来 SwiftUI 开发的便利性。
抛开框架本身,开发者体验才是 SwiftUI 最大的特色。
如何开始学习并掌握 SwiftUI
那么,如何学习 SwiftUI?永远不要想着通过学习一样东西来掌握一样东西,而是要「做中学」。你想要做一样东西,在这个过程中学习它,做完后,你会发现你既掌握了这个技能,也做出了东西。
这是我根据我的经验总结的两条路:
1、写一款使用新 API 的新 App
新 API 意味着只能运行在新的 iOS 系统上,既然如此,那干嘛不用 SwiftUI 来写这个 App 的主要功能呢?于是想一想 Apple 新推出了哪些新的 API,可以做哪些以前做不到的事情,然后用 SwiftUI 来做这个新产品吧。
2、将老 App 的部分功能改写成 SwiftUI
如果你有一款正在维护和开发的的 App,它的部分功能已经非常稳定并且在可以预见的未来不可能做什么更改了,那么试着将其改写成 SwiftUI。SwiftUI 不是一个排它性的东西,你完全可以只在一个小组件开始用起它,于是,就像以前可以混合编写 Swift + Objective-C 一样,你可以混合编写经典 UI + SwiftUI。
对我来说,我会把奇点、效率控等部分已经稳定的功能,开始用 SwiftUI 实现,边学习边实践。假如有时间的话,我也会去开个新产品,来不受限制地尝试新技术。
关于 SwiftUI 的未来
关于这个技术的未来,我是没有什么除了积极拥抱以外的态度的。Swift 1.0 五年前刚诞生的时候,这个世界还是一片空白,第一年,开始有些新的 App 用 Swift 写了起来,到现在 App Store 里面已经有近 1/4 的 App 或多或少用了 Swift 了。这个趋势已经不需要多说了。
SwiftUI 也会是一样。
今年 9 月,继续会和以前一样,会有用 SwiftUI 写的 App 出现——尽管它会是 iOS 13 Only。然后等到明年,会有更多 App 出现,SwiftUI 本身也会更加完善。然后年复一年…
当然,你完全可以等两三年后,等 SwiftUI 足够成熟了以后再开始采用它,完全没有问题,也是一个明智的选择。前提是,你能抑制住你的好奇心和学习的欲望…
好了,不多写了,这篇就算我的开端吧。
预祝周老师早日成功!