首页 > 代码库 > 关于 Swift 的一点初步看法

关于 Swift 的一点初步看法

本文转自:http://onevcat.com/2014/06/my-opinion-about-swift/

感谢原作者

技术分享

尽管四点半就起床去排队等入场,结果还是仅仅能坐在了蛮后面的位置看着大屏幕參加了今年的 Keynote。事实上今年 OS X 和 iOS 的更新亮点都不少。可是显然风头和光芒都让横空出世的 Swift 给抢走了。这部分内容由于不是 NDA。所以能够提前说一说。

Swift 是 Apple 自创的一门专门为 Cocoa 和 CocoaTouch 设计的语言,意在用来替代 objc。

早上公布的时候有非常多朋友说事实上他们已经写了非常久的 Swift,并且还给了一个站点,在这里首先须要说明的是,这个站点的 Swift parallel scripting language 和 Apple 的 Swift 并非一个东西,两者能够说毫无关系。Apple 还在自己的 Swift 介绍页面后面非常友好地放上了 Swift parallel scripting language 的站点链接,以提示那些真的想搜还有一个 Swift 却被 SEO 误导过来的可怜的孩子。

我个人来说,在把玩了 Swift 几个小时之后,深深地喜欢上了这门新的语言。这篇文章以一个刚開始学习的人(事实上如今大家都是刚開始学习的人)的角度来对 Swift 做一个简单的介绍,由于如今大家事实上是在同一个起跑线上,所以理解上可能会有非常多不精确的地方。出错了也请大家轻喷指正。

什么是 Swift

非常多人在看到 Swift 第一眼的感觉是。这丫是个脚本语言啊。由于在非常多语法特性上 Swift 确实和一些脚本非常相似。可是首先须要明白的是,至少在 Apple 开发中,Swift 不是以一种脚本语言来执行的,全部的 Swift 代码都将被 LLVM 编译为 native code,以极高的效率执行。依照官方今天给出的 benchmark 数据,执行时比 Python 快 3.9 倍。比 objc 快 1.4 倍左右。我相信官方数据肯定是有些水分,可是即使这样,Swift 也给人带来非常多遐想和期待。Swift 和原来的 objc 一样,是类型安全的语言,变量和方法都有明白的返回,而且变量在使用前须要进行初始化。而在语法方面,Swift 迁移到了业界公认的非常先进的语法体系。当中包括了闭包,多返回,泛型和大量的函数式编程的理念,函数也最终成为一等公民能够作为变量保存了(尽管详细实现和使用方法上来看和 js 那种传统意义的好像不太一样)。

初步看下来语法上借鉴了非常多 Ruby 的人性化的设计,可是借助于 Apple 自己手中 强大的 LLVM,性能上必需要甩开 Ruby 不止一两个量级。

还有一方面。Swift 的代码又是能够 Interactive 来“解释”运行的。新的 Xcode 中增加了所谓的 Playground 来对开发人员输入的 Swift 代码进行交互式的对应,开发人员也但是使用 swift 的命令行工具来交互式地运行 swift 语句。细心的朋友可能注意到了,我在这里把“解释”两个字打上了双引號。

这是由于即使在命令行中。 Swift 事实上也不是被解释运行的,而是在每一个指令后进对从開始以来的 swift 代码行了一遍编译,然后运行的。这种做法下依旧能够让人“感到”是在做交互解释运行,这门语言的编译速度和优化水平,可见一斑。同一时候 Playground 还顺便记录了每条语句的运行时候的各种情况,叫做一组 timeline。能够使用 timeline 对代码的运行逐步检查,省去了断点 debug 的时间,也很方便。

至于更具体的比方 Swift 的语法之类的,能够參见 Apple 在 iBooks 放出的 The Swift Programming Language,或者你是开发人员的话,也能够看看 pre-release 的參考文档

Cool。我能够如今就使用 Swift 么?

Swift 作为 Apple 钦定的 objc 的继承者,作为 iOS/Mac 开发人员的话,是认为必须和值得学习和使用的。

如今 Swift 能够和原来的 objc 或者 c 系的代码混用(注意,不同于 objc 和 c++ 或者 c 在同一个 .mm 文件里的混编,swift 文件不能和 objc 代码写在同一个文件里。你须要将两种代码分开)。编译出来的二进制文件是能够执行在 iOS 7 和 iOS 8 的设备上的(iOS 6 及之前的是不支持的)。

尽管我没有尝试过,可是使用新的 clang 对 swift 进行编译的 app 二进制包,仅仅要你的 target 是 iOS 7 及以上的话,应该如今就能够往 App Store 进行提交。

一个非常好的消息是 Xcode 6 中应该是全部的文档都有 objc 和 swift 两种语言版本号了。所以在文档支持上应该不是问题。而依照 Apple 开发人员社区的一贯的跟进速度。有理由相信在不久的将来,Apple 非常可能会果断 drop 掉 objc 的支持,而全面转向 swift。所以,关于标题里的这个问题的答案,我个人的建议是,尽快学习。尽快開始使用。

假设你有一定的脚本语言的基础(Ruby 最好,Python 或者 JS 什么的也非常不错),又比較了解 Cocoa 框架的思想的话,转型到新的语言应该全然不是问题。你会发现曾经非常多 objc 实现起来非常郁闷的事情,在新语言下都易如反掌。

我毫不忌讳地说,在 Apple 无数project师和语言设计天才的努力下。Swift 吸收了众多语言的精华。应该是如今这个世界上最新(这不是废话么),也是最先进的一门编程语言(之中的一个)了。而我觉得,也正是 Apple 对这门语言有这种自信,才会在这么一个能够说公司还在全盛的时候,不守陈规、如此大胆地进行语言的更换。由于 Apple 必然比你我都精于算计,切换语言带来的利益必须远大于弊端,才会值得冒如此大的风险。

在这个意义上来说。今天的公布会就是程序开发业界的一枚重磅炸弹。也必将写入史冊,而你我事实上真的身在当中,变成了这段历史的见证者。

怎样開始?

非常easy,尽管历年的 WWDC 都在 NDA 的控制之下使得我们无法讨论过多的内容,可是这次的 Swift 破天荒地是在 NDA 之外的内容。Apple 已经放出了足够多的资源让我们開始学习。首先是官方的 Swift 的介绍页面,你能够了解一些 Swift 的基本特性和细节。

然后就是从 iBooks 下载Swift 的书籍。你能够不必通读全书。而仅仅须要高速浏览一下 35 页之前的 Tour 部分的内容。就能够開始将其运用到开发中了。由于不受 NDA 限制,所以 StackOverflow 的 swift 标签和Google 上应该会立即充斥满相关的问题和内容。及时跟进,相信和其它开发人员一同从零開始学习和进步,你会非常快上手并熟练使用 Swift 进行开发。

(由于真的。太好用了。你非常难想象我在写一个美丽的闭包或者嵌套函数或者多返回时,那种内心的激动和喜悦...)

总结

这次的 WWDC 能够说是 Apple 之前几年布局的一个汇总和爆发。从一開始的 Mac 整合电话和短信,以及无处不在的 Handoff,到后面的通知中心 widget 和系统 framework 的 extension,以及更甚的 Family Share 等等,能够说 Apple 通过自己对产业链的控制和生态圈的完好。让 iDevice 或者 Mac 的用户粘度得到了前所未有的加强。对一个人来说,可能一台苹果设备之后他会非常easy购买第二台第三台;对于一家人来说,可能一个成员拥有苹果设备之后。其它人也会被宣传和便捷带动。

这是一手妙招,也是 Apple 近期几年一直在做的趋势。

罗马事实上不是一天建成的,在开发语言方面,Apple 事实上也精心打造了非常多年。在语言而言,之前全然没有这方面经验的苹果,毅然决然地选择离开 GCC 阵营,另起炉灶自己弄 Clang 和 LLVM 的布局。而最终在几年来对 objc 小修小补之后来了一次革命性的爆发。

在日进万金的大好时候,抛弃一个成熟开发社区。而转向一种新的编程语言,做出这样的决策,仅仅能说这家公司的魄力让人折服和钦佩。还有一方面,Apple 这么做的还有一个理由应该是吸引很多其它的开发人员增加到 Apple 开发阵营,由于相对于 objc 的语法和学习曲线,Swift 显然要easy非常多,对于其它阵营的开发人员,这也会是一个非常好的入场机会。

正应了这次 WWDC 的宣传语。Apple 已经为我们提供了更好的工具,我们有什么理由不继续我们的征途,实现我们的梦想呢?

Write the code. Change the world.


关于 Swift 的一点初步看法