一、控制流
1.1 if语句中,条件必须是一个布尔表达式,这意味着 if score {…} 这样的代码会编译报错,不会隐式的与0做比较,与C、java等语言不同;
1.2 运行switch中匹配的语句,程序会退出switch语句,并不会继续执行下去,所以不需要在每个语句结尾写break;必须包含default语句,否则会报错;
1.3 swift中特有的范围操作符..和…区别:..不包含上界,…包含上界,例如:0..3 表示 0,1,2 不包含3,0…3 表示 0,1,2,3包含3

二、函数和闭包
2.1 函数定义方法:用func声明一个函数,使用名字和参数调用函数,使用->来指定函数返回值,无返回值可以省略;
2.2 函数参数是可变的,用一个数组来获取它们;例如:

1
2
3
4
5
6
7
func sumOf(numbers: Int …) -> Int {
var sum = 0
for number in numbers { //将numbers视为一个数组来操作
sum += number
}
return sum
}

2.3 函数可以嵌套,被嵌套的函数可以访问外侧函数中的常量和变量;函数可以作为另一个函数的返回值;

三、对象和类
3.1 使用init来创建一个构造器,使用deinit创建一个析构函数;

四、常量和变量
4.1 如果使用与Swift保留字相同的名称作为常量或变量名时,使用反引号(·)将关键字包围的方式作为名字使用,不过尽量避免与保留关键字相同;
4.2 输出函数有println,另外还有print,二者区别是:println会换行,print不会换行;

五、注释
5.1 swift中,注释可以嵌套,这与其他语言不同,其他语言大多数注释是不可以嵌套的;

六、数据类型
6.1、整型,尽量不要使用UInt,除非你真的需要存储一个和当前平台原生字长相同的无符号整型,除了这种情况,最好使用Int,即使你要存储的值是非负数。统一使用Int可以提高代码的可复用性,避免不同类型数字之间的转换,并且匹配数字的类型推测;
6.2 如果你没有给浮点字面量标明类型,Swift会推测为Double类型;推测浮点数类型时,Swift总是会选择Double,而不是Float;如果表达式中同时出现整数和浮点数,会被推测为Double类型;
例如:

1
let pi = 3.1415926 //pi会被推测为Double类型

6.3 数值字面量可以包括额外的格式来增强可读性,并不影响字面量,例如:

1
2
3
let paddedDouble = 000123.456 // 123.456
let oneMillion = 1_000_000 //1000000
let justOverOneMillion = 1_000_000.000_000_1 //1000000.0000001

6.4 不同类型不能直接做运算,需要显式类型转换,例如,UInt16类型不能和UInt8类型直接相加,因为他们类型不同:

1
2
3
let twoThousand:UInt16 = 2_000
let one:UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)

6.5 整数和浮点数的转换必须显式指定类型;
6.6 字面量不同于数字类常量和变量,没有特定的类型,可以直接运算,例如:

1
let sum = 3 + 0.14158

6.7 在需要使用Bool类型的地方使用了非布尔值,Swift的类型安全机制会报错;例如:

1
2
3
4
let i = 1
if i {
//这个例子会报错,不会通过编译
}

6.8 元组类型的正确描述:

1
let http404Error = (404,”Not Found”) //描述为:一个类型为(Int,String)的元组

6.9 元组在临时组织值的时候很有用,但是并不适合创建复杂的数据结构,如果数据结构不是临时使用,请使用类或者结构体,而不是元组;
6.10 nil不能用于非可选的常量和变量
例如:

1
2
3
4
let a = nil //编译报错
var b = nil //编译报错
let a? = nil //正确
let b? = nil //正确

6.11 如果一个变量之后可能变成nil的画,请不要使用隐式解包可选类型,如果需要在变量的生命周期中判断是否为nil的话,请使用普通可选类型;

未完待续…