# Swift基本语法
在前一章节中我们已经看到了 Swift 的开发环境设置。 让我们再次开始用下面的 OS Xplayground 创建的 Hello,World!程序 ,它包括 import Cocoa ,如下所示:
import Cocoa
/* My first program in Swift */
var myString = “Hello, World!”
println(myString)
如果为 iOS playground 创建相同的程序,然后将包括 import UIKit 语句,程序看起来如下:
import UIKit
var myString = “Hello, World!”
println(myString)
当我们使用适当playground运行上面的程序,得到以下结果:
Hello, World!
现在来看看Swift程序的基本结构,因此,这是了解 Swift 编程语言的基本构建块。
Import 在 Swift 的使用
可以使用 import 语句来直接导入任何 Objective-C框架(或C库)到 Swift程序。例如上述 import cocoa 语句使所有 Cocoa 库,APIs,并形成了所有OS X开发层,在运行时可用在 Swift。
Cocoa在Objective-C是C的一个超集实现,所以很容易将C甚至C++混合到 Swift 应用。
Tokens 在 Swift 的使用
Swift程序由各种令牌组成,令牌可以是一个关键字,标识符,常量,字符串文字或符号。例如,下面的Swift语句由三个令牌组成:
println(“test!”)
The individual tokens are:
println
(
“test!”
)
注释
注释就像帮助文本在 Swift 程序中,它们被编译器忽略。多行注释以/*开头并以*/字符结束,如下图所示:
/* My first program in Swift */
Swift可以嵌套多行注释。以下是Swift有效的注释:
/* My first program in Swift is Hello, World!
/* Where as second program is Hello, Swift! */
单个注释使用//在注释的开头写入。
// My first program in Swift ,这是一行注释
分号
Swift不要求必须使用分号(;)在代码每个语句后面,虽然其可选的,但是如果使用分号,然后编译器不会有什么影响。
但是,如果在同一行,用分号作为分隔符分为多个语句, 否则编译器将引发语法错误。可以重写上面的Hello,World!程序如下:
import Cocoa
/* My first program in Swift */
var myString = “Hello, World!”; println(myString)
标识符
Swift 标识符是用于识别一个变量,函数,或任何其它用户定义的项目的名称。一个标识符开始于字母A到Z或a到z或下划线_后跟零个或多个字母,下划线和数字(0〜9)。
Swift不允许标识符中有标点字符,如@,$和%。Swift 是区分大小写的编程语言。因此,Manpower和manpower 在Swift中是两个不同的标识符。下面是可接受的标识的一些例子:
Azad zara abc move_name a_123
myname50 _temp j a23b9 retVal
要使用保留字作为标识符,需要在标识符之前和之后把它用反引号(‘)引用起来。例如,class 不是一个有效标识符,但`class`是有效的。
关键字
以下关键字在 Swift 中保留。这些保留字不要用作常量或变量或任何其它标识符名称,除非它们用反引号转义:
在声明中使用关键字
class deinit enum extension
func import init internal
let operator private protocol
public static struct subscript
typealias var
在语句中使用关键词
break case continue default
do else fallthrough for
if in return switch
where while
在表达式和类型中使用关键字
as dynamicType false is
nil self Self super
true _COLUMN_ _FILE_ _FUNCTION_
_LINE_
在特定情况下使用的关键字
associativity convenience dynamic didSet
final get infix inout
lazy left mutating none
nonmutating optional override postfix
precedence prefix Protocol required
right set Type unowned
weak willSet
空格
仅包含空格,可能带有注释行,被称为一个空行,Swift编译器完全忽略它。
空格是 Swift 用来描述空格,制表符,换行符和注释术语。空格分隔一个声明为另一部分,使编译器能够查明在一个声明中的元素,如int,结束和下一个元素开始。因此,在下面的语句:
var age
var 和 age 之间必须有至少一个空白字符(通常是一个空间),以便编译器能够区分它们。另外,下面的语句:
int fruit = apples + oranges //get the total fruits
fruit 和=之间,或=和apples
空格字符不是必须的,但如果希望使用是以可读性为目的,可以加入一些空格。
字面量
字面量是整数,浮点数或字符串类型的一个值的源代码表示。以下是字面值的例子:
92 // Integer literal
4.24159 // Floating-yiibai literal
“Hello, World!” // String literal
# Swift数据类型
虽然编写任何编程语言,需要使用不同的变量来存储各种信息。变量不过是保留的内存位置来存储值。这意味着,当创建一个变量,在内存中会保留一些空间。
可能喜欢像存储字符串,字符,宽字符,整数,浮点数,布尔等各种数据类型的信息。根据一个变量的数据类型,操作系统分配内存,并决定什么可以存储保留在存储器。
####内置数据类型
Swift 为程序员提供内置以及用户定义的种类数据类型。 以下是声明变量使用最频繁的基本数据类型的列表:
* Int 或 UInt – 这是用于整数。更具体地可以使用Int32,Int64来定义32或64位有符号整数,其中作为UInt32或UInt64用来定义32或64位无符号整数的变量。 For example, 42 and -23.
* Float – 这是用来表示一个32位浮点数,一般用于使用较小的小数点数字。 例如:3.14159,0.1,和 -273.158。
* Double – 这是用来表示一个64位浮点数,用于非常大的浮点值。 例如: 3.14159, 0.1, 和 -273.158.
* Bool – 这代表一个布尔值,真或假。
* String – 这是有序字符集合。例如, “Hello, World!”
* Character – 这是一个单字符字符串。例如, “C”
* Optional – 这表示可以容纳一个值或没有任何值的变量。
有下列有关整数类型要点:
* 在32位的平台上,Int 大小与 Int32 的大小相同。
* 在64位的平台上,Int 大小与 Int64 的大小相同。
* 在32位的平台上,UInt 的大小与 UInt32 的大小相同。
* 在 64 位的平台上,UInt 的大小与 UInt64 的大小相同。
* Int8, Int16, Int32, Int64 可以用来表示 8 Bit, 16 Bit, 32 Bit 和 64 Bit 形成有符号整数。
* UInt8, UInt16, UInt32 和 UInt64 可以用来表示 8 Bit, 16 Bit, 32 Bit 和 64 Bit 形成无符号整数。
####绑定值
下表显示变量类型,需要多少内存存储此值在存储器中,在这种类型的变量可以存储最大值和最小值。
类型 典型的位宽 典型范围
Int8 1byte -127 ~ 127
UInt8 1byte 0 ~ 255
Int32 4bytes -2147483648 ~ 2147483647
UInt32 4bytes 0 ~ 4294967295
Int64 8bytes -9223372036854775808 ~ 9223372036854775807
UInt32 8bytes 0 ~ 18446744073709551615
Float 4bytes 1.2E-38 to 3.4E+38 (~6 数字)
Double 8bytes 2.3E-308 to 1.7E+308 (~15 数字) 类型别名
可以从现有类型使用typealias创建一个新的名称。以下是使用简单 typealias 的语法来定义新类型:
typealias newname = type
例如,下面告诉编译器Feet 是 Int 的另一个名字:
typealias Feet = Int
现在,下面的声明是完全合法的,并创建一个整型变量为 distance:
import Cocoa
typealias Feet = Int
var distance: Feet = 100
println(distance)
当我们使用 playground 运行上面的程序,到以下结果。
100
####类型安全
Swift 是一种安全的语言,这意味着,如果代码的一部分需要一个字符串, 那么不能错误地传递一个int。
由于 Swift 是类型安全的,当类型检查时它执行编译代码并标志类型不匹配的错误。
import Cocoa
var varA = 42
varA = “This is hello”
println(varA)
当我们编译上面的程序它产生以下编译时错误。
Playground execution failed: error: :6:6: error: cannot assign to ‘let’ value ‘varA’
varA = “This is hello”
####类型推断
在它编译代码时,类型推断使编译器自动推导出特定表达式的类型, 简单地通过检查所提供的值。Swift 采用类型推断制定出合适的类型如下。
import Cocoa
// varA is inferred to be of type Int
var varA = 42
println(varA)
// varB is inferred to be of type Double
var varB = 3.14159
println(varB)
// varC is also inferred to be of type Double
var varC = 3 + 0.14159
println(varC)
当我们使用 playground 运行上面的程序,得到以下结果。
42
3.14159
3.14159
# Swift变量变量为我们提供了一个程序可以操纵存储的名称。在 Swift 中每个变量具有特定的类型,它决定了变量存储的大小; 在存储器内存储的值的范围 ,并且操作组可以变量应用。**下列是 Swift 变量的基本类型*** Int 或 UInt – 这是用于整数。更具体地可以使用Int32,Int64来定义32或64位有符号整数,其中作为UInt32或UInt64用来定义32或64位无符号整数的变量。 For example, 42 and -23.* Float – 这是用来表示一个32位浮点数,一般用于使用较小的小数点数字。 例如:3.14159,0.1,和 -273.158。* Double – 这是用来表示一个64位浮点数,用于非常大的浮点值。 例如: 3.14159, 0.1, 和 -273.158.* Bool – 这代表一个布尔值,真或假。* String – 这是有序字符集合。例如, “Hello, World!”* Character – 这是一个单字符字符串。例如, “C”* Optional – 这表示可以容纳一个值或没有任何值的变量。Swift 还允许定义其他类型的变量,我们将在以后了解到类似 Optional, Array, Dictionaries, Structures, 和 Classes 等类型。以下部分将介绍在 Swift 编程中如何声明和使用各种不同类型的变量。变量声明变量声明意味着告诉编译器创建多少变量存储空间。在使用变量之前,必须使用 var 关键字声明它们,如下: var variableName =下面是一个简单的例子来说明如何在 Swift 中声明一个变量: import Cocoa var varA = 42 println(varA)当我们使用 playground 运行上面的程序,我们得到以下结果。 42**类型注解**当要声明一个变量,可以提供一个类型注解,以明确那种变量的值可以存储。下面是语法: var variableName:=下面是一个简单的例子说明 Swift 如何使用注解来声明一个变量。在这里要注意的是,如果不使用类型注释,那么它就变成强制变量的初始值的类型,否则使用类型注解声明变量的类型。
import Cocoa
var varA = 42
println(varA)
var varB:Float
varB = 3.14159
println(varB)
当我们使用 playground 运行上面的程序,我们得到以下结果。
42
3.1415901184082
**命名变量**
一个变量名可以由字母,数字和下划线组成。它必须以字母或下划线。大写和小写字母的变量是不同的,因为 Swift 是区分大小写的编程语言。
可以使用简单或Unicode字符来命名变量。以下是有效的例子:
import Cocoa
var _var = “Hello, Swift!”
println(_var)
var 变量名 = “你好世界”
println(变量名)
当我们使用 playground 运行上面的程序,我们得到以下结果。
Hello, Swift!
你好世界
**打印变量**
使用 println 函数可以打印一个常量或变量的当前值。 可以通过封装名称在括号中,并在左括号前用一个反斜杠转义内插一个变量值,以下是有效的例子:
import Cocoa
var varA = “ValueA”
var varB = 1008.00
println(“Value of \(varA) is more than \(varB) millions”)
当我们使用 playground 运行上面的程序,我们得到以下结果。
Value of ValueA is more than 1008.0 millions