1.基础部分
变量: var A = 7; A=8 //一行多条语句时需要用【;】显式分割
常量:let B = 7 //常量不能改变值
输出:println("The value of A is \(A).") 输出的内容会在最后换行
//单行注释
/*多行
注释*/
Float表示32位浮点数,Double表示64位浮点数
let pi = 3 + 0.14159 //pi会被推测为Double类型
整数转换: let A: UInt16 = 2000; let B:UInt8 = 1; Let C = A + UInt16(A)
类型别名:typealias AudioSample = UInt16
元组(tuples):let http404Error = (404, "Not Found"); 解元组:let (statusCode, statusMessage) = http404Error
元组元素:println("The status code is \(http404Error.0)")
可选:let convertedNumber = possibleNumber.toInt() //convertedNumber 为Int?,"123" => 123, "Hello" => nil,声明可选变量没有赋值,自动被设置为nil
隐式解析可选(可以被当做非可选来使用): Let A? = 7; println(A!); Let B! = 7; println(B)
*如果一个变量之后可能变成nil的话请不要使用隐式解析可选。
断言:assert(age >= 0, "A person's age cannot be less than zero") //age<0时被触发
2.基本运算符
不等:2 != 3
for index in 1..5 { sum += index } //1..5包含1不包含5,1...5包含5
3.字符串和字符
字符串常量变量:var str = "A" str +=“ and B”于objc的类NSString和NSMutableString不同,字符串是否可以修改仅仅通过定义的是常量还是变量来决定。
字符串长度:不同的Unicode字符需要不同的内存空间,计算长度时需要countElements 函数
字符串比较:相等 A==B,前缀hasPrefix,后缀hasSuffix
4.集合类型
数组:var ShoppingList: String[] = ["Eggs", "Milk"] //String[]可省略,空数组var someInts = Int[]()
数组插入:shoppingList.insert("Maple Syrup", atIndex: 0) //"Maple Syrup"变成第一项
字典:var airports: Dictionary<String, String> = ["TYO": "Tokyo", "DUB": "Dublin"] //可省略Dictionary<String, String>
5.控制流
For-In:for index in 1...5 { }; For:for var index = 0; index < 3; ++index {}
while, do-while: do { statements } while condition
switch:不存在隐式的贯穿(Fallthrough),所以case块不需要break语句。需要贯穿时可使用fallthrough关键字
break:中断该循环体,调到循环结束
6.函数
多返回值函数:func count(string: String) -> (vowels: Int, consonants: Int, others: Int = 0) { }; let total = count("some arbitrary string!"); println("\(total.vowels)")
In-Out形参:func swapTwoInts(inout a: Int, inout b: Int) { }
函数变量:var mathFunction: (Int, Int) -> Int = addTwoInts
7.闭包
sort函数调用函数:func backwards(s1: String, s2: String) -> Bool { return s1 > s2 };var reversed = sort(names, backwards) //backwards为true表示字符大的放前边
sort函数调用闭包1:reversed = sort(names, { (s1: String, s2: String) -> Bool in return s1 > s2 })
sort函数调用闭包2:reversed = sort(names, { s1, s2 in return s1 > s2 } )
sort函数调用闭包3:reversed = sort(names, { $0 > $1 } )
sort函数调用闭包3:reversed = sort(names, >)
8.枚举
存储原始值:enum ASCIIControlCharacter: Character { case Tab = "\t" case LineFeed = "\n"case CarriageReturn = "\r" }
9.类和结构体
结构体和枚举是值类型,类是引用类型。
恒等运算符:“等价于===”表示两个类类型(class type)的常量或者变量引用同一个类实例。不等价与!==
NSArray和NSDictionary实例总是以对已有实例引用,而不是拷贝的方式被赋值和传递。
10.属性
延迟存储属性@lazy,存储属性,计算属性var origin = Point()
只有getter没有setter的计算属性是只读属性
let只能声明常量属性,用var声明只读计算属性
属性监视器:willSet(newParam),didSet { 默认参数名oldValue }
全局变量部,是在函数、方法、闭包或任何类型之外定义的变量,局部是在函数,方法,闭包内部定义的变量。
全局的常量和变量都是延迟计算的,不需要标记@lazy。