基础类型
虽然Swift是一个为开发iOS和OS X app设计的全新编程语言,但是Swift的很多特性还是跟C和Objective-C相似。
Swift也提供了与C和Objective-C类似的基础数据类型,包括整形Int、浮点数Double和Float、布尔类型Bool以及字符串类型String。Swift还提供了两种更强大的基本集合数据类型,Array和Dictionary,更详细的内容可以参考:Collection Types。
跟C语言一样,Swift使用特定的名称来定义和使用变量。同样,Swift中也可以定义常量,与C语言不同的是,Swift中的常量更加强大,在编程时使用常量能够让代码看起来更加安全和简洁。
除了常见的数据类型之外,Swift还集成了Objective-C中所没有的“元组”类型,可以作为一个整体被传递。元组也可以成为一个函数的返回值,从而允许函数一次返回多个值。
Swift还提供了可选类型,用来处理一些未知的不存在的值。可选类型的意思是:这个值要么存在,并且等于x,要么根本不存在。可选类型类似于Objective-C中指针的nil值,但是nil只对类(class)有用,而可选类型对所有的类型都可用,并且更安全。可选类型是大部分Swift新特性的核心。
可选性类型只是Swift作为类型安全的编程语言的一个例子。Swift可以帮助你更快地发现编码中的类型错误。如果你的代码期望传递的参数类型是String的,那么类型安全就会防止你错误地传递一个Int值。这样就可以让编程人员在开发期更快地发现和修复问题。
常量和变量
常量和变量由一个特定名称来表示,如maximumNumberOfLoginAttempt 或者 welcomeMessage。常量所指向的是一个特定类型的值,如数字10或者字符”hello”。变量的值可以根据需要不断修改,而常量的值是不能够被二次修改的。
常量和变量的声明
常量和变量在使用前都需要声明,在Swift中使用let关键词来声明一个常量,var关键词声明一个变量。如下面例子:
let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0
</div>
以上代码可以理解为:
声明一个叫maximumNumberOfLoginAttempts的值为10的常量。然后声明一个变量currentLoginAttempt初始值为0。
在这个例子中,最大的登录尝试次数10是不变的,因此声明为常量。而已经登录的尝试次数是可变的,因此定义为变量。也可以在一行中声明多个变量或常量,用,号分隔:
var x = 0.0, y = 0.0, z = 0.0
</div>
注:如果一个值在之后的代码中不会再变化,应该用let关键词将它声明为常量。变量只用来存储会更改的值。
类型注解
在声明常量和变量时,可以使用注解来注明该变量或常量的类型。使用:号加空格加类型名在变量或常量名之后就可以完成类型注解。下面的例子就是声明了一个变量叫welcomeMessage,注解类型为字符串String:
var welcomeMessage: String
分号 “:” 在这的作用就像是在说:…是…类型的,因此上述代码可以理解为:
声明一个叫welcomeMessage的变量,它的类型是String
这个类型注解表明welcomeMessage变量能无误地存储任何字符串类型的值,比如welcomeMessage = “hello”
注:实际编程中很少需要使用类型注解,定义常量或者变量的时候Swift已经根据初始化的值确定了类型信息。Swift几乎都可以隐式的确定变量或常量的类型,详见: Type Safety and Type Inference。而上面的welcomeMessage的例子中,初始化值没有被给出,所以更好的办法是指定welcomeMessage变量的类型而不是让Swift隐式推导类型。
常量和变量的命名
Swift中可以使用几乎任何字符来作为常量和变量名,包括Unicode,比如:
let π = 3.14159
let 你好 = "你好世界"
let = "dogcow"
</div>
但是名称中不能含有数学符号,箭头,无效的Unicode,横线-和制表符,且不能以数字开头,尽管数字可以包含在名称里。一旦完成了声明,就不能再次声明相同名称的变量或常量,或者改变它的类型。变量和常量也不能互换。
注:如果你想用Swift保留字命名一个常量或者变量,你可以用 ` 符号把命名包围起来。尽管如此,除非处于特别的意图,尽量不要使用保留字作为变量/常量名。
可以改变变量的值为它声明的类型的其它值,如下的例子里,变量friendlyWelcome的值从“Hello!”被修改为”Bonjour!”:
var friendlyWelcome = “hello!”
friendlyWelcome = “Bonjour!”
// friendlyWelcome is now “Bonjour!”
</div>
与变量不同的是,常量的值一旦确定就不能修改。如果想尝试改变一个常量的值,编译代码时就会报错
let languageName = "Swift"
languageName = "Swift++"
// this is a compile-time error - languageName cannot be changed
</div>
输出常量和变量
Swift使用println来输出变量或者常量:
println(friendlyWelcome)
// prints “Bonjour!”
</div>
println是一个全局函数,用来输出一个值,最后输出一个换行。在Xcode中,println输出在控制台中。print函数也类似,只不过最后不会输出换行。
println函数一般输出一个字符串
println("This is a string")
// prints "This is a string"
</div>
println函数还可以格式化输出一些日志信息,就像是Cocoa中NSLog函数的行为一样,可以包括一些常量和变量本身。Swift在字符串中插入变量名作为占位符,使用反斜杠()来提示Swift替换变量/常量名为其实际的值,如:
println(“The current value of friendlyWelcome is (friendlyWelcome)”) // prints “The current value of friendlyWelcome is Bonjour!”
</div>
注:关于格式化字符的详见 String Interpolation
注释
不参与编译的语句称为注释,注释可以提示你代码的意图。Swift中的注释和C语言中的一样,有单行注释
//this is a comment
</div>
和多行注释,使用/和/分隔
/* this is also a comment,
but written over multiple lines */
</div>
和C语言不同的是,多行注