如果你在阅读这篇文章,意味者你听说了swift这个新的编程语言。Apple在它的WWDC发布会上推出了swift,对于我们中的很多人来说,这是一个完全的惊喜。开发者最不想要的就是又要学习全新的编程语言才能强化下一代iOS和OS X的应用。
如果你用过oc开发iOS或者OS X应用,Swift会给你点熟悉的感觉,但是仍然存在着很多重要的差异。你必须再一次硬着头皮,熟悉swift优雅和现代的语法。这一系列的教程就是向你展示Swift和oc的不同,并且让你知道那些不同为什么是有好处的。让我们开始这一段新的旅程。
Prerequisites
Programming
整个系列,我都会引用oc,并且与swift做对比。然而,这并不意味着你一定要熟悉oc。
换句话说吧,如果你对任何一门编程语言有点了解,这都会帮助你更好的学习swift。因为本系列不会涉及编程的基础概念。我期望阅读的人对于变量,常量,函数,控制流和面向对象编程还是有点认识的。
如果你对oc,java,php,ruby或者javascript挺熟悉的,你不会对本系列阐述的概念有任何不能理解的地方。事实上,你会很快掌握swift和许多流行的编程语言相通的概念。
Xcode
Swift只驻扎在Xcode6上,所以你得安装Apple发布的最新版本的IDE。你可以在App Store或者Apple的开发者中心下载该软件。
Swift
和oc或者java相比,swift是一门富有表达能力,用词简洁的语言,常常让我们想到Ruby和JavaScript。尽管Swift的老爹,Chris Lattner,从很多其他的语言得到了灵感,swift看上去还是像一个从石头蹦出来的语言,自成一派。
正如你所知道的,oc是c的超集,但是swift不是。虽然swift也使用{}并且和c公用很多一样的关键字,swift和c仍然是不兼容的。
swift是一门现代的编程语言,感觉上去非常直观,特别是如果你有java或者任何基于c的编程语言的经历。在开发和设计swift的过程中,Chris Lattner专注于那些能够定义swift的关键特性上。
Safety
Safety是swift的一块基石。在safety上你会马上认清楚swift和oc的不同,这会大大影响你所写的代码。如果你写过oc,这个调整会需要点时间。
LLVM
Chris Lattner也设计了LLVM,所以swift使用LLVM编译器不会让人有任何吃惊。使用LLVM能够获得速度,能力和可靠性上的加成。在大多数场景下,swift比oc运行的速度有显著的提高。
Type Inference
Type Inference是swift的一个关键特性。swift在编译时观察你的代码,提醒你任何不匹配的类型。这意味你能很早的发现错误,避免一些常用错误的发生。
幸运的是,swift提供的帮助很多。swift在推断变量和常量的类型时表现的很聪明,这意味者你不需要刻意的声明变量和常量的类型。在下面的代码段里,我们声明了一个变量a,赋其值为”this is a string”,swift的智商够推断出a是string类型。
var a="this is a string"
这个例子很平凡,你马上就知道swift的能力远远不止此。
Variables and Constants
c和oc的常量很有用,但是大多数开发者对常量使用的不频繁。在swift中,常量的出场率和变量有的一拼。如果一个变量的值不改变,那这个变量应该是常量。变量用var声明,常量用let声明。
var a=1//variable
let b=1//constant
这不仅表达意图明显,而且提高了安全性。我们会在后面的文章中对变量和常量有更多的了解。
Semicolon
在swift中,分号不是必须的,你可以是用分号,例如将多个语句称述在同一行,但是分号不是必须的。下面的例子帮助你很好的理解这个概念
var a=1;
var b=2
var c=1;var d=2
我们仅仅触及了swift的表面。在整个系列中你会学习更多的特性和概念。我不想仅仅给你塞很多理论上的东西,是时候你自己下水试试手,写点代码。这带我们到了Xcode6和Swift最棒的特色之一,playgrounds。
Playgrounds
在Xcode6,Apple推出了playgrounds。playgrounds可以说是学习swift的完美工具。playgrounds是一个交互式的环境,你可以写点swift并且马上看到结果。这不仅让学习swift更有趣,而且比在Xcode中建立工程更加的快捷和直观。
事实上,由于其太简单了,我们最好废话少说,直接开干。打开Xcode6,选择New>Playground…给playground起名并且将平台设置为iOS。
告诉Xcode你要将playground安置在哪里,点击Create。playground仅仅是一个带有.playground扩展的文件,而不是一大捆文件和文件夹齐聚一堂。
摆在你面前的用户界面不能再简单不过了,在左边,你看到一个顶上有注释的代码编辑器,一个import语句,还有一行你肯定看得懂的代码。在右边,你可以看到左边代码的输出结果。
让我们花点时间来理解playground的代码。如果你和oc,php或者js打过交道,第一行看起来就相当熟悉了。
由于我们选择了iOS作为我们的平台,Xcode添加了导入UIKit框架的语句。这让我们能够使用该框架下声明的类和常量。
第三行看起来很熟悉,但是有些需要澄清的地方,我们声明了一个变量str,赋予其字符串。这一行理解起来很容易,但是注意,变量名前加上了var这个关键字,而不是你在oc环境中熟悉的类型名。如果在oc中这一行代码应该是
NSString *str=@"Hello,playground";
在oc中,我们会用变量类型代替var这个关键字,在字符串前添加@符号,在语句尾部添加分号。var关键字不是oc中变量类型的替代品。var只是指示str是一个变量而不是常量,仅此而已。让我解释的稍微再详细点,将下面的代码添加到playground中。
let hello="Hello,playground"
let关键字告诉编译器hello是一个常量,而不是变量。str和hello都是字符串类型,但是str是变量,而hello是常量。这个差别通过添加下面的代码就可以清楚理解。
str="This is a variable"
hello="This is a constant"
给str赋予新的值不会有任何问题,给hello赋予新的值会导致错误。Xcode告诉我们不能赋予hello新的值,因为hello是常量,不是变量。这是swift的另一个关键特性,需要花点时间习惯。
这个想法非常简单,如果变量的值不会改变,该变量应该是常量。尽管这显得更像语义上的细节,我保证这会让你的代码更加安全,更加不容易犯错。准备好在这个系列中常常偶遇let这个关键字吧。
我们在这个系列中会大量使用playgrounds,因为这是学习这门语言的好方法。还有很多playground的特性我还没有提到,但是我们必须首先了解swift这门语言的基础,然后我们能够获益良多。
Conclusion
我仍然会碰到不待见Swift的开发者。swift有很多概念需要时间来习惯。但是我很有信心。你们也会喜欢上swift,赞赏它的能力,优雅和简明。在接下来的系列中,我们会开始探索swift的基础。