拥抱Swift吧,Objective-C已经是过去时
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设计技巧也会越来越好。