Swift 2.1 Up and Running—— 变量和常量

泊学原文
泊学技法视频
当我们学习一门语言的时候,无论是说还是写,也无论是外语或者编程语言,我们都会用自己已经掌握的语言中的元素去理解新语言中对应的部分。学习Swift也一样,作为一种编程语言,它有着和Objective-C,JavaScript或C#等其它编程语言共通的概念和类似的表达方式。如果你或多或少了解过一些编程语言,学习Swift将会是一个非常轻松的过程。

Playground

Playground是Apple在2014年WWDC发布Swift的时候,和XCode一起发布的用于实时调试Swift代码的小工具。我们绝大部分讲Swift语言本身的视频,都会直接在Playground里完成。Playground会随着我们编写代码实时为我们完成编译,并自动为我们显示每一行代码的执行结果,无论是简单语句,循环,甚至是各种UI,Playground都可以完美胜任,是我们理解Swift中各种语言特性的利器。

我们打开XCode,选择Get started with a playground。
bo-reading-welcome-to-xcode.jpg

之后,Platform选择iOS,为自己的Playground写一个名字,例如我们用到的variables-and-constants。
bo-reading-build-an-ios-playground.jpg

点击Next按钮为Playground文件设置一个保存目录后, 就可以开始在Playground中编写代码了。
bo-reading-playground-biolerplate.jpg

在上图中我们可以看到,Playground左边是我们编写代码的区域,右边则对显示出对应语句的执行结果。

从定义一个变量开始

变量是编程语言中最常用的语法元素,它们用于在程序中把一个名字(例如:swiftString)和某种特定类型的值(例如:"Swift is fun.")关联起来。

在Swift里,我们使用var关键字来定义各种不同类型的变量:

var  Name =  Value

例如,定义一些我们熟悉的基本类型变量:

 //: #### Fundamental types
    
    //: Integer
    var hours = 24
    
    //: Double
    var PI = 3.14
    
    //: Bool
    var swiftIsFun = true
    
    //: String
    var boxue = "boxueio.com"

除了这些基本类型之外,Swift还有一些自己特有的类型,例如:方便我们打包多个类型的Tuple

//: Tuple - Pack many types of values together
var me = ("Mars", 11, "11@boxue.io")
me.0
me.1

定义好一个Tuple之后,我们就可以使用示例代码中,me.0,me.1这样的方式来访问Tuple中的成员了。我们也可以像下面这样直接修改变量的值:

hours = 12
PI = 3.14159

如果我们不希望变量的值被修改,我们就需要定义一种特殊的变量。

常量是不能被修改的变量

定义常量的方法和变量类似,我们把关键字var,变成关键字let就可以了。例如:

let minutes = 30
let fireIsHot = true

一旦我们定义常量之后,就不能再修改常量的值了,否则,编译器会告诉我们发生了错误。例如,我们修改常量fireIsHot:

fireIsHot = false

这时,我们就可以在Playground中直接看到一个编译错误:
bo-reading-modify-constant-error.jpg
*“只要程序中的变量值不会被修改,就总应该使用let来定义它。这不仅可以防止变量被意外修改,编译器还可以针对常量做更多优化。”
——最佳实践*

Type inferende / annotation

在前面的例子里,我们可以发现,无论是整数、浮点数、字符串还有Tuple,我们都没有明确的指定变量的类型, Swift编译器会根据我们为变量的赋值自动推导变量的类型,这个特性,在Swift里叫做Type Inference。

但有时,我们定义变量的时候,并不能确定变量的初始值,这个时候,我们就必须像下面这样明确告诉编译器我们需要的变量类型:

var Name:Type

这种通过:Type指定变量类型的形式,在Swift中叫做Type annotation。例如:

var x: Int
var s: String

在代码中使用注释

Swift和C以及Objective-C一样,支持用 // 开始的单行注释, 以及用 /**/ 包围的多行注释,包含在注释中的代码,Swift编译器不会进行处理。例如:

//: Single line comment

/*:
A multiple line comment
A multiple line comment
A multiple line comment
*/

另外,在Playground里,我们还可以给注释添加一些Markdown标记,这样Playground就可以帮我们渲染出类似这样的效果:
bo-reading-candv-screencast.jpg

大家可以到来查看完整的Markdown内容,在这里,列一些我们经常会用到的。

使用markdown的方法很简单,我们在单行注释 // 或多行注释的开始 / 后面添加一个冒号 :,像这样 //: 或 /:。之后,我们点击Playground菜单中的:Editor > Show Rendered Markup 就可以看到经过渲染后的效果了。
bo-reading-toggle-markdown.jpg

下面,是一些我们比较常用的Markdown标记:

用#, ##, ###, ####等表达的不同级别的标题;
这里,开头的 # 一定要和后面的title有一个空格。

/*:
# Title level 1
## Title level 2
### Title level 3
#### Title level 4
*/

bo-reading-levels.jpg
斜体或加粗字体
我们使用一对星号表示斜体,使用一对双星号表示加粗:

//: A *bold* or **Italic** font.

bo-reading-build-or-italic.jpg
用 * 或 + 表示无序列表:

这里,每一个项目开始的 + 或 * 一定要和后面的item有一个空格。

/*:
 +unordered list item 1
 +unordered list item 2
 +unordered list item 3
 */

bo-reading-unordered-list.jpg
用1, 2, 3, 4表示有序列表:

/*:
 1.ordered list item 1
 2.ordered list item 2
 3.ordered list item 3
 */

bo-reading-ordered-list.jpg
用----表示分隔符:
这里,分隔符上下的内容,一定要和分隔符之间有一个空行。

/*: This line will not be rendered.

The above line

----

The bottom line
*/

bo-reading-separator.jpg


泊学
166 声望27 粉丝

现如今的开发者,早已不是一句我是“某某程序员”可以说清的了。全栈,渐渐从一个概念,变成了对更好工作的核心需求。