是时候该学 Swift 了

我绝对是一个闲不下来,且喜欢自虐的人。早在一两个星期前,Yui 同学一直很纠结于她正在使用的「Shadowrocket」不好用。主要体现在程序在开启的状态下,很多国内的网站访问不正常,而相比之下「Surge」的表现则要良好的多得多,然而 50 刀(刚刚降价)的价钱,则不是人人都愿意买单的。后来发现有个叫「Potatso」的 App 有着类似的功能,而且在 GitHub 上开放源码

有 Apple 开发者账号的我和 Jason 很跃跃欲试地尝试了一下编译该工程,结果无疾而终。一堆一堆的依赖错误和无法解决的编译错误,纵然就算我们拿到了很多人梦寐以求的 Network Extensions Entitlement 也是无功而返。而这个「土豆丝」正是用 Swift 来编写的,由于我的才疏学浅,从 Swift 发布至今,一直尚未染指 Swift。但是因为这个倒霉的 App 编译不过,反而激起了我极大地学习兴趣。

仔细研究过后发现,编译不过一方面是作者的 Podfile 写得不好(各种依赖关系没有很严格限制,出现了 2.0 -> 3.0 这种大版本的跨度),另一方面是我刚好赶在了苹果发布 Xcode 8Swift 3 的时候。嗯,没错,新版本不兼容旧版本的语法哦,是不是很开心?反正我是炒(ping)鸡(guo)开(qu)心(si)的啦,欢喜之情溢于言表。

但是伟大的苹果总得照顾下这么多的开发者吧?当然有照顾了,苹果很贴心地提供了语法转换工具。好,那我们就看看这个强大的转换工具吧!转换之后,好开心,编译错误从几百变成了 999+,我的内心OS:!#(&!@#&!(@*$&

最后的最后,无论是 Jason 还是我,都没有能成功的把这个程序编译出来,更不要说解决签名问题了。但是,这确引发了我的兴趣,到处了解一下 Swift 现在的情况,这一看不要紧,厉害了。

不是我不知道,这世界变化快啊。首先是 IBM 在 2015 年底出了个 IBM Swift Sandbox,这货可以直接在线体验 Swift 编程、还可以跟同事分享代码。我就想说,IBM 的人都这么无聊么?每次出什么新东西,他们都可以跟进的这么快吗?感兴趣的同学可以去体验下,跟 Xcode 里面跑 Swift Playground 的感觉类似。

然后上半年又有消息传出说 Google 可能用 Swift 作为 Android 第一语言。而 Facebook 和 Uber 也在考虑把 Swift 作为中心运营使用的语言。我觉得 Google 这也是被 Oracle 给欺负的吧。不了解的同学可以自行搜索一下 Java 语言的前世今生以及 Google 与 Oracle 之间因为 Java 而产生的恩怨情仇。

接下来我又发现了用 Swift 构建的服务端框架 Perfect。好吧,连名字都这么大(xiao)气(zhang)!我就好奇,这个域名得多少钱呢?一个开源的软件,能买得起这么好的域名,背后必然有「黑手」啊。感情这是要跟 Node.jsRuby on RailsPHP 大打出手的节奏啊!什么时候出个浏览器前端专用,iOS 工程师可以改变世界了啊!

然后,连 C# 背后的大佬 Microsoft 都按耐不住了,有文章说为了吸引更多的 iOS 开发者来开发 Windows 10 应用,微软已经在努力开发 Swift 编译器了!太可怕了,这简直就是要逆天的节奏啊。

虽然大家都这么 high,但是我实在不觉得一个商业公司推动的一个像玩具一样的语言,从推出仅仅 2 年左右的时间,就给这么多人洗了脑。Youtube 上一大堆 10 几岁除了 Swift 其他语言都不懂的年轻程序员更是大放厥词,大有 Swift 一统天下的感觉。不信邪的我去查了一下 TIOBE Index for September 2016,现时语言排名 Swift 排名第 13,已经超越 Objective-C 紧跟 Ruby 之后。看来,从现在开始应该用 Swift 来写 iOS 和 macOS 的 App 了。

不得不说,男怕入错行,女怕嫁错郎。攻城狮这一行,确实不好做。看来还是得不断学习和进修才行。既然 Swift 开源了,Xcode 升级到 8 了,Swift 也已经 3.0 了,似乎又到了该学一门语言的时候了。在写本文之前,Swift 3 的基本语言特性和语法已经快速过了一遍了,接下来需要做一些实质性的编程工作来更深入地了解。

在 Medium 上发现了 Sam Lu 写的「100 Days of Swift」,然后就心血来潮,想要加以效仿了。于是乎,本文又成了一篇立 flag 的湿货多、不接地气的文章了。

目标:100 天内用 Xcode 8 和 Swift 3 独立完成 Sam 哥的 40 个小程序

从伟大祖国母亲生日开始算的话,100 天,刚好是过农历新年前,看看那个时候我能不能完成这个挑战,欢迎各位鞭(gu)策(li)。所有的源代码都会上传到 GitHub 上。感兴趣的同学可以关注一下,欢迎大家交流讨论。

另外,那些已经有了好的点子,只差一个程序员的同学,你们要等我啊。给我 100 天的时间,苟富贵勿相忘,到时候我去帮你们做 App!