Swift 是苹果在 WWDC2014 发布的一门编程语言,用来撰写 OS X和 iOS 应用程序。2010 年 7 月,LLVM 编译器的原作者暨苹果开发者工具部门总监克里斯·拉特纳(Chris Lattner)开始着手 Swift 编程语言的工作。除此之外,还有一个 dogfooding 团队也大力参与其中。历时四年,Swift 才得以与用户见面。
苹果宣称,Swift 编程语言具有“快速、现代、安全、互动”的特点,它基于C和 Objective-C,而却没有C的一些兼容约束。Swift 采用了安全的编程模式和添加现代的功能来使得编程更加简单、灵活和有趣,而它的界面则基于 Cocoa 和 Cocoa Touch 框架,展示了软件开发的新方向。
Xcode Playgrounds 功能是 Swift 为苹果开发工具带来的最大创新,该功能提供强大的互动效果,能让 Swift 源代码在撰写过程中能实时显示出其运行结果。
作为资深苹果开发专家的 Boisy G. Pitre 曾任 Siri 语音识别技术提供方 Nuance 公司 Mac 产品小组的资深软件工程师,参与开发了语音识别软件 Dragon Dictate。如今,他在情绪识别公司 Affectiva 任职移动远景规划师。
Boisy Pitre 十分青睐 Swift 语言,他还撰写了一本针对初学者的《Swift 基础教程》,从变量、类型、函数、闭包等基本概念入手,结合 Swift 示例,一步步指导读者使用 Swift 开发 App,他在书的最后还给出了一个 App 开发全流程。
Swift 语言对 iOS 和Android开发的影响
当苹果引入 Swift 时,我就知道这门语言会在几年之内成为计算机语言版图中的重要一块。
我很难预测作为开源语言的 Swift 会如何影响 Android 开发。Google 在语言初创方面有 Go 语言,Go 对于 Android 来说就像是 Swift 之于 iOS。不过我很期待会有人用 Swift 写 Android 应用,这就像是有人用 Go 写 iOS 应用一样。
一种语言会比另一种语言更成功吗?各自平台的语言一定会依附在它们本来的平台上吗?只有时间能告诉我们。但是苹果开源 Swift 语言的决定肯定会让各种变化朝更好的方向发展。
Objective-C 很不错,但它已经过时了
所有计算机语言都会从其他语言身上借鉴一些东西。对于 Swift 来说也是如此。从语法和存储模型的角度上说,Swift 上就有很多 Rust 的影子。此外,Swift 对于安全的强调使其与C和 C++ 保持了一定距离,所以它们之间的共同点比较少。我相信苹果很努力想让 Swift 成为自己的语言。
目前 iOS 中的很多应用框架都还是 Objective-C 的,调用的方式是使用桥接头文件,但未来会出现更多基于 Swift 的框架,今后的调用也会变为更加简洁的方式,苹果正在努力实现这个艰巨的任务,因为需要转换的框架有很多。不过很快,我们就会看到专属于 Swift 的新框架,这样的框架在 Objective-C 中甚至都找不到同类。这种情况的发生也会对 Objective-C 的后续使用造成很大的影响。
我认为 Swift 在未来有可能会取代 Objective-C,没有人知道这会花多长时间,但是应该是在 5 年之内。不过,计算机语言的生命很长,C语言到现在已经有 40 岁了,所以 Objective-C 也不会彻底消失,它只是将在语言世界中所占的份额变得非常小。
Objective-C 是一门很不错的语言,但是它带有C语言的遗留问题和包袱。对于编写应用来说,Objective-C 在未来会变得越来越脱节。拿我自己举例来说,我现在就已经不再用 Objective-C 来开启任何一个新的 iOS 或 OS X项目了,对于新项目来说,我只使用 Swift 来开发。
如何选择学习哪种编程语言?
初学者完全可以先学习 Swift。Swift 最让我青睐的特性是其语法的清晰度。用关键字“let”建立一个常量变量,和用关键字“var”建立一个可变变量相比,很大程度上简化了C/C++风格的语法。用执行命名参数可以清晰地写函数(如 Objective-C),而创建和使用闭包也变得更简单。
而对于已经掌握一两门编程语言的程序员来说,他的选择则要取决于“已有的一两种语言”是什么。如果这两种语言是 Objective-C 和 Swift,或者C和C++,或者其中任何组合,为了挑战思维,他可以去学习一种完全不同的语言,比如一种函数式语言(举例:Scheme)。
C、C++、Objective-C 以及 Swift 这样的命令式语言都遵循着相同的模型,学习同类语言很简单,因此就需要让自己多接触不同的语言泛型。虽然他可能并不会用这种语言来写应用,但这会有利于全面开启他对于计算机语言的理解。
有必要掌握所有 API 吗?
关于何时接触大量的库和 API,以及是否需要学习所有 API 的问题,我经常会用木匠的工具腰带做类比。
大家可以想象一下,一个木匠的工具腰带中会装有所有你能想象得到的工具吗?结论当然是否,他只会装上那些经常使用的工具。当他需要特殊工具的时候,他会来到卡车前或者库房里,打开里面的大工具箱,把需要的特殊工具找出来使用,然后再把它放回去。而这种使用频率往往在很长一段时间里也只有一次到两次。
对于编程语言和 API 来说也是如此。虽然知道的 API 越多,你就越能更好地解决问题,但是有多少人能完整地了解所有的 API 呢?我的建议是,先比较完整地学习一门语言,然后再继续研究这种语言的细微之处,也就是开始接触这门语言中可以用来创建有用应用的框架和 API。然后可以按照一定频率(比如每周一次,每次3-5 小时)去选择一个新的 API 来学习它的功能。你可能并不会经常使用这个 API,但是你了解它,当需要用到时,你就会知道“从哪里把它取出来使用”。
iOS 开发专家的知识框架是什么样的?
一个全面的 iOS 专家必须掌握这四样东西:
用来写应用的语言(Swift / Objective-C);
对创建软件的工具的控制(Xcode);
关于 iOS 应用基础框架和 API 的强大知识储备;
鉴别好的 UI 设计的能力。
他可能要经历很多应用和上百小时的编程才能达到这个水平,每个应用都有自身的要求和需要的 API。只要你写的应用越多,就能越广地接触到各式苹果框架,UI 设计技巧也会越来越好。