简介
Swift是2014年6月由Apple公司发布的编程语言,Swift发布之初就引起广大开发者强烈的兴趣。目前,Swift已经发布了正式版,其语法也趋于稳定。《疯狂Swift讲义》以最新的OS X 10.10为平台,以Xcode 6.1为开发工具,全面介绍了Swift正式版的语法,以及使用Swift开发iOS应用的知识。全书从Swift基本语法开始介绍,详细介绍了Swift的基本语法结构、Swift函数式编程特征、Swift的面向对象特征、Foundation框架的核心类库用法等知识,并通过示例介绍了如何在iOS应用中混合使用Swift与Objective-C进行开发。掌握Swift语言之后,本书将带领读者掌握iOS应用开发的基本理论,以及iOS应用的MVC设计和事件处理编程。本书最后一章介绍了一个俄罗斯方块游戏。《疯狂Swift讲义》并不局限于介绍Swift的简单语法,而是从“项目驱动”的角度来讲授理论,全书为Swift所有语法提供了大量的示例程序,大部分地方甚至从正、反两方面举例,务求使读者能举一反三地真正掌握Swift编程。如果读者在阅读本书时遇到了技术问题,可以登录疯狂Java联盟(http://www.crazyit.org)发帖,笔者将会及时予以解答。《疯狂Swift讲义》为所有打算深入掌握Swift编程的读者而编写,适合各种层次的Swift学习者和开发者阅读,也适合作为大学教育、培训机构的Swift教材。
目录
第1章 Swift语言与开发环境 1
1.1 Swift语言简介 2
1.1.1 Swift语言 2
1.1.2 关于Swift的几个误解 2
1.2 搭建Swift开发环境 3
1.2.1 下载和安装Xcode 4
1.2.2 安装辅助工具和文档 6
1.3 第一个Swift程序 7
1.3.1 Swift程序入口 7
1.3.2 使用Playground工具 8
1.3.3 开发Swift项目 11
1.4 使用终端窗口编译、运行Swift程序 13
1.4.1 使用swiftc编译Swift程序 13
1.4.2 在早期版本的OS X平台上编译Swift程序 14
1.4.3 使用swift交互命令 15
1.5 熟悉Xcode 16
1.5.1 创建iOS项目 16
1.5.2 熟悉导航面板 17
1.5.3 熟悉检查器面板 20
1.5.4 熟悉库面板 21
1.5.5 使用Xcode的帮助系统 23
1.6 本章小结 26
第2章 Swift的基本数据类型 27
2.1 注释 28
2.2 变量与常量 29
2.2.1 分隔符 29
2.2.2 标识符规则 31
2.2.3 Swift的关键字 31
2.2.4 声明变量和常量 32
2.2.5 输出变量和常量 33
2.3 整型 34
2.4 浮点型 35
2.5 数值型之间的类型转换 37
2.5.1 整型之间的转换 37
2.5.2 浮点型与整型之间的转换 38
2.6 布尔型 39
2.7 元组(tuple)类型 40
2.7.1 定义元组类型的变量 40
2.7.2 获取元组中的元素值 40
2.7.3 为元组中的元素命名 41
2.8 可选类型 42
2.8.1 可选和nil 42
2.8.2 强制解析 43
2.8.3 可选绑定 44
2.8.4 隐式可选类型 44
2.9 类型别名 45
2.10 字符和字符串 46
2.10.1 字符类型 46
2.10.2 字符串类型 47
2.10.3 字符串的可变性 49
2.10.4 字符串的基本操作 49
2.10.5 字符串比较 50
2.10.6 获取字符串中字符的Unicode编码 50
2.11 本章小结 51
第3章 运算符与表达式 52
3.1 赋值运算符 53
3.2 算术运算符 54
3.3 溢出运算符 57
3.3.1 值的上溢 57
3.3.2 值的下溢 58
3.3.3 除零溢出 58
3.4 位运算符 59
3.5 扩展后的赋值运算符 61
3.6 范围运算符 61
3.6.1 闭范围运算符 61
3.6.2 半开范围运算符 62
3.7 比较运算符 62
3.8 逻辑运算符 63
3.8.1 Swift的6个逻辑运算符 63
3.8.2 组合逻辑与括号 64
3.9 三目运算符 65
3.10 nil合并运算符 66
3.11 运算符的结合性和优先级 67
3.12 本章小结 68
第4章 流程控制 69
4.1 顺序结构 70
4.2 分支结构 70
4.2.1 if条件语句 70
4.2.2 switch分支语句 73
4.2.3 switch不存在隐式贯穿(fallthrough)和显式贯穿 74
4.2.4 使用break结束switch 76
4.2.5 switch的范围匹配 76
4.2.6 switch的元组匹配 77
4.2.7 case的值绑定 78
4.2.8 case的where子句 79
4.3 循环结构 80
4.3.1 while循环语句 80
4.3.2 do while循环语句 81
4.3.3 for循环 82
4.3.4 for-in循环 84
4.3.5 嵌套循环 85
4.4 控制循环结构 86
4.4.1 使用break结束循环 86
4.4.2 使用continue忽略本次循环的剩下语句 87
4.4.3 使用return结束方法 88
4.5 本章小结 89
第5章 集合 90
5.1 数组 91
5.1.1 声明和创建数组 91
5.1.2 使用数组 92
5.1.3 使用for-in遍历数组 93
5.1.4 数组的可变性和数组的修改 94
5.1.5 多维数组 96
5.1.6 数组的应用举例 99
5.2 字典 101
5.2.1 声明和创建字典 102
5.2.2 使用字典 103
5.2.3 使用for-in遍历字典 104
5.2.4 单独使用字典的keys或values 104
5.2.5 字典的可变性和字典的修改 105
5.2.6 字典的应用举例 106
5.3 集合的复制 107
5.3.1 数组的复制 107
5.3.2 字典的复制 109
5.4 本章小结 110
第6章 函数和闭包 111
6.1 函数入门 112
6.1.1 定义和调用函数 112
6.1.2 函数返回值 113
6.1.3 递归函数 115
6.2 函数的形参 116
6.2.1 外部形参名及其简化形式 116
6.2.2 形参默认值 117
6.2.3 个数可变的形参 119
6.2.4 常量形参和变量形参 119
6.2.5 In-Out形参 120
6.3 函数类型 124
6.3.1 使用函数类型 124
6.3.2 使用函数类型作为形参类型 125
6.3.3 使用函数类型作为返回值类型 126
6.4 函数重载 127
6.5 嵌套函数 129
6.6 嵌套函数与闭包 130
6.6.1 回顾嵌套函数 130
6.6.2 使用闭包表达式代替嵌套函数 131
6.7 闭包表达式 132
6.7.1 调用闭包(使用闭包返回值) 132
6.7.2 利用上下文推断类型 133
6.7.3 省略return 133
6.7.4 省略形参名 134
6.7.5 尾随闭包 134
6.8 捕获上下文中的变量和常量 136
6.9 闭包是引用类型 137
6.10 本章小结 137
第7章 面向对象(上) 139
7.1 Swift的面向对象支持 140
7.1.1 面向对象概述 140
7.1.2 Swift的面向对象类型 140
7.2 枚举 141
7.2.1 定义枚举 141
7.2.2 枚举值和switch语句 143
7.2.3 原始值 144
7.2.4 关联值 145
7.3 类和结构体 147
7.3.1 定义结构体和类 147
7.3.2 创建实例 151
7.3.3 值类型与引用类型 152
7.3.4 引用类型的比较 154
7.3.5 self关键字 156
7.3.6 类和结构体的选择 158
7.4 存储属性 159
7.4.1 实例存储属性与实例变量 159
7.4.2 结构体常量与实例属性 160
7.4.3 延迟存储属性 160
7.5 计算属性 161
7.5.1 定义计算属性 162
7.5.2 setter方法简化 164
7.5.3 只读的计算属性 164
7.6 属性观察者 165
7.7 方法 167
7.7.1 方法的所属性 167
7.7.2 将方法转换为函数 168
7.7.3 方法的外部形参名 169
7.7.4 Swift方法的命名习惯 171
7.7.5 值类型的可变方法 172
7.7.6 属性和方法的统一 174
7.8 下标 175
7.8.1 下标的基本用法 175
7.8.2 下标重载 178
7.9 可选链 180
7.9.1 使用可选链代替强制解析 180
7.9.2 使用可选链调用方法 182
7.9.3 使用可选链调用下标 183
7.10 类型属性和类型方法 183
7.10.1 类型成员的修饰符 184
7.10.2 值类型的类型属性 184
7.10.3 类的类型属性 185
7.10.4 值类型的类型方法 186
7.10.5 类的类型方法 186
7.11 构造器 187
7.11.1 类和结构体的默认构造器 187
7.11.2 构造器的外部形参名 188
7.11.3 在构造过程中常量属性是可修改的 190
7.11.4 使用闭包或函数为属性设置初始值 191
7.11.5 值类型的构造器重载 192
7.12 可能失败的构造器 194
7.12.1 结构体与可能失败的构造器 194
7.12.2 枚举与可能失败的构造器 195
7.13 本章小结 196
第8章 面向对象(下) 197
8.1 继承 198
8.1.1 继承的特点 198
8.1.2 重写父类的方法 199
8.1.3 重写父类的属性 200
8.1.4 重写属性观察者 201
8.1.5 重写父类的下标 202
8.1.6 使用final防止重写 203
8.2 类的构造与析构 204
8.2.1 类的指定构造器和便利构造器 205
8.2.2 类的构造器链 206
8.2.3 两段式构造 208
8.2.4 构造器的继承和重写 212
8.2.5 类与可能失败的构造器 215
8.2.6 可能失败的构造器的传播 216
8.2.7 重写可能失败的构造器 217
8.2.8 子类必须包含的构造器 219
8.2.9 析构器 220
8.3 多态 221
8.3.1 多态性 221
8.3.2 使用is运算符检查类型 223
8.3.3 使用as运算符向下转型 223
8.3.4 Any和AnyObject 226
8.4 嵌套类型 226
8.5 扩展 227
8.5.1 使用扩展添加属性 228
8.5.2 使用扩展添加方法 230
8.5.3 使用扩展添加可变方法 231
8.5.4 使用扩展添加构造器 232
8.5.5 使用扩展添加下标 232
8.5.6 使用扩展添加嵌套类型 233
8.6 协议 233
8.6.1 规范、接口与协议语法 233
8.6.2 协议指定的属性要求 235
8.6.3 协议指定的方法要求 238
8.6.4 协议指定的可变方法要求 240
8.6.5 协议指定的下标要求 241
8.6.6 协议指定的构造器要求 243
8.6.7 使用协议作为类型 245
8.6.8 合成协议 246
8.6.9 通过扩展为已有的类型添加协议 247
8.6.10 唯类(Class-Only)协议 248
8.6.11 可选协议 249
8.6.12 输出实例和Printable协议 251
8.6.13 使用自定义类型作为字典的key 252
8.7 隐藏与封装 255
8.7.1 理解封装 255
8.7.2 访问控制符 256
8.7.3 访问控制语法 257
8.7.4 使用访问权限定义类型 258
8.7.5 子类的访问权限 260
8.7.6 常量、变量、属性、下标的访问权限 260
8.7.7 构造器的访问权限 262
8.7.8 协议的访问权限 262
8.7.9 扩展的访问权限 262
8.7.10 类型别名的访问权限 263
8.8 Swift内存管理 263
8.8.1 理解自动引用计数(ARC) 263
8.8.2 强引用循环 265
8.8.3 使用弱引用解决强引用循环 267
8.8.4 使用无主引用解决强引用循环 269
8.8.5 闭包与对象的强引用循环 271
8.8.6 使用弱引用或无主引用解决闭包的强引用循环 272
8.9 Swift面向对象语法总结 273
8.10 本章小结 274
第9章 泛型 275
9.1 泛型的作用 276
9.2 泛型函数 277
9.2.1 定义泛型函数 277
9.2.2 定义多个类型参数 278
9.3 泛型类型 280
9.3.1 定义泛型类型 280
9.3.2 从泛型类派生子类 281
9.3.3 扩展泛型类型 282
9.4 类型约束 283
9.5 关联类型 285
9.5.1 使用关联类型 285
9.5.2 扩展已有类型来确定关联类型 287
9.6 where子句 287
9.7 本章小结 289
第10章 运算符函数 290
10.1 运算符重载 291
10.2 前置和后置运算符 293
10.3 扩展后的赋值运算符 295
10.4 比较运算符 295
10.5 自定义运算符 296
10.5.1 开发自定义运算符 297
10.5.2 自定义运算符的结合性和优先级 298
10.6 本章小结 299
第11章 Foundation框架详解 300
11.1 包装类 301
11.1.1 它们不是包装类 301
11.1.2 NSValue和NSNumber 302
11.2 字符串(NSString与NSMutableString) 303
11.2.1 NSString的常用功能 303
11.2.2 可变字符串(NSMutableString) 305
11.3 日期与时间 306
11.3.1 日期与时间(NSDate) 306
11.3.2 日期格式器(NSDateFormatter) 307
11.3.3 日历(NSCalendar)与日期组件(NSDateComponents) 309
11.4 数组(NSArray与NSMutableArray) 310
11.4.1 NSArray的功能与用法 310
11.4.2 对集合元素整体调用方法 313
11.4.3 对NSArray进行排序 314
11.4.4 使用枚举器遍历NSArray集合元素 315
11.4.5 可变数组(NSMutableArray) 316
11.5 集合(NSSet与NSMutableSet) 317
11.5.1 NSSet的功能与用法 317
11.5.2 NSSet判断集合元素重复的标准 320
11.5.3 NSMutableSet的功能与用法 323
11.5.4 NSCountedSet的功能与用法 324
11.6 有序集合(NSOrderedSet与NSMutableOrderedSet) 325
11.7 字典(NSDictionary与NSMutableDictionary) 326
11.7.1 NSDictionary的功能与用法 327
11.7.2 对NSDictionary的key排序 330
11.7.3 对NSDictionary的key进行过滤 331
11.7.4 NSMutableDictionary的功能与用法 332
11.8 本章小结 333
第12章 使用Swift开发iOS应用 334
12.1 从iOS项目开始 335
12.1.1 iOS项目包含的文件 335
12.1.2 Interface Builder简介 336
12.1.3 添加控件 338
12.1.4 修改控件属性 339
12.1.5 UIView支持的属性 340
12.1.6 UILabel支持的属性 343
12.2 MVC 345
12.2.1 程序入口和应用程序代理 345
12.2.2 理解iOS的MVC 347
12.2.3 掌握UIViewController控制器 348
12.3 事件机制 350
12.3.1 程序获取控件的两种方式 350
12.3.2 事件处理的3种方式 356
12.4 代码控制UI界面 362
12.4.1 不使用界面设计文件开发UI界面 362
12.4.2 使用代码创建UI界面 364
12.4.3 自定义UI控件 366
12.5 本章小结 369
第13章 Objective-C与Swift混编 370
13.1 Swift调用Objective-C 371
13.1.1 创建Swift项目 371
13.1.2 添加Objective-C类 372
13.1.3 调用Objective-C类 374
13.2 Objective-C调用Swift 376
13.2.1 为Objective-C项目添加Swift类 376
13.2.2 调用Swift类 378
13.3 本章小结 379
第14章 俄罗斯方块 380
14.1 俄罗斯方块简介 381
14.2 开发游戏界面 382
14.2.1 界面布局设计 382
14.2.2 开发游戏界面控件 385
14.3 俄罗斯方块的数据模型 387
14.3.1 定义数据模型 387
14.3.2 初始化游戏状态数据 388
14.4 实现游戏逻辑 391
14.4.1 处理方块掉落 391
14.4.2 处理方块左移 396
14.4.3 处理方块右移 397
14.4.4 处理方块旋转 398
14.4.5 启动游戏 401
14.5 本章小结 402
1.1 Swift语言简介 2
1.1.1 Swift语言 2
1.1.2 关于Swift的几个误解 2
1.2 搭建Swift开发环境 3
1.2.1 下载和安装Xcode 4
1.2.2 安装辅助工具和文档 6
1.3 第一个Swift程序 7
1.3.1 Swift程序入口 7
1.3.2 使用Playground工具 8
1.3.3 开发Swift项目 11
1.4 使用终端窗口编译、运行Swift程序 13
1.4.1 使用swiftc编译Swift程序 13
1.4.2 在早期版本的OS X平台上编译Swift程序 14
1.4.3 使用swift交互命令 15
1.5 熟悉Xcode 16
1.5.1 创建iOS项目 16
1.5.2 熟悉导航面板 17
1.5.3 熟悉检查器面板 20
1.5.4 熟悉库面板 21
1.5.5 使用Xcode的帮助系统 23
1.6 本章小结 26
第2章 Swift的基本数据类型 27
2.1 注释 28
2.2 变量与常量 29
2.2.1 分隔符 29
2.2.2 标识符规则 31
2.2.3 Swift的关键字 31
2.2.4 声明变量和常量 32
2.2.5 输出变量和常量 33
2.3 整型 34
2.4 浮点型 35
2.5 数值型之间的类型转换 37
2.5.1 整型之间的转换 37
2.5.2 浮点型与整型之间的转换 38
2.6 布尔型 39
2.7 元组(tuple)类型 40
2.7.1 定义元组类型的变量 40
2.7.2 获取元组中的元素值 40
2.7.3 为元组中的元素命名 41
2.8 可选类型 42
2.8.1 可选和nil 42
2.8.2 强制解析 43
2.8.3 可选绑定 44
2.8.4 隐式可选类型 44
2.9 类型别名 45
2.10 字符和字符串 46
2.10.1 字符类型 46
2.10.2 字符串类型 47
2.10.3 字符串的可变性 49
2.10.4 字符串的基本操作 49
2.10.5 字符串比较 50
2.10.6 获取字符串中字符的Unicode编码 50
2.11 本章小结 51
第3章 运算符与表达式 52
3.1 赋值运算符 53
3.2 算术运算符 54
3.3 溢出运算符 57
3.3.1 值的上溢 57
3.3.2 值的下溢 58
3.3.3 除零溢出 58
3.4 位运算符 59
3.5 扩展后的赋值运算符 61
3.6 范围运算符 61
3.6.1 闭范围运算符 61
3.6.2 半开范围运算符 62
3.7 比较运算符 62
3.8 逻辑运算符 63
3.8.1 Swift的6个逻辑运算符 63
3.8.2 组合逻辑与括号 64
3.9 三目运算符 65
3.10 nil合并运算符 66
3.11 运算符的结合性和优先级 67
3.12 本章小结 68
第4章 流程控制 69
4.1 顺序结构 70
4.2 分支结构 70
4.2.1 if条件语句 70
4.2.2 switch分支语句 73
4.2.3 switch不存在隐式贯穿(fallthrough)和显式贯穿 74
4.2.4 使用break结束switch 76
4.2.5 switch的范围匹配 76
4.2.6 switch的元组匹配 77
4.2.7 case的值绑定 78
4.2.8 case的where子句 79
4.3 循环结构 80
4.3.1 while循环语句 80
4.3.2 do while循环语句 81
4.3.3 for循环 82
4.3.4 for-in循环 84
4.3.5 嵌套循环 85
4.4 控制循环结构 86
4.4.1 使用break结束循环 86
4.4.2 使用continue忽略本次循环的剩下语句 87
4.4.3 使用return结束方法 88
4.5 本章小结 89
第5章 集合 90
5.1 数组 91
5.1.1 声明和创建数组 91
5.1.2 使用数组 92
5.1.3 使用for-in遍历数组 93
5.1.4 数组的可变性和数组的修改 94
5.1.5 多维数组 96
5.1.6 数组的应用举例 99
5.2 字典 101
5.2.1 声明和创建字典 102
5.2.2 使用字典 103
5.2.3 使用for-in遍历字典 104
5.2.4 单独使用字典的keys或values 104
5.2.5 字典的可变性和字典的修改 105
5.2.6 字典的应用举例 106
5.3 集合的复制 107
5.3.1 数组的复制 107
5.3.2 字典的复制 109
5.4 本章小结 110
第6章 函数和闭包 111
6.1 函数入门 112
6.1.1 定义和调用函数 112
6.1.2 函数返回值 113
6.1.3 递归函数 115
6.2 函数的形参 116
6.2.1 外部形参名及其简化形式 116
6.2.2 形参默认值 117
6.2.3 个数可变的形参 119
6.2.4 常量形参和变量形参 119
6.2.5 In-Out形参 120
6.3 函数类型 124
6.3.1 使用函数类型 124
6.3.2 使用函数类型作为形参类型 125
6.3.3 使用函数类型作为返回值类型 126
6.4 函数重载 127
6.5 嵌套函数 129
6.6 嵌套函数与闭包 130
6.6.1 回顾嵌套函数 130
6.6.2 使用闭包表达式代替嵌套函数 131
6.7 闭包表达式 132
6.7.1 调用闭包(使用闭包返回值) 132
6.7.2 利用上下文推断类型 133
6.7.3 省略return 133
6.7.4 省略形参名 134
6.7.5 尾随闭包 134
6.8 捕获上下文中的变量和常量 136
6.9 闭包是引用类型 137
6.10 本章小结 137
第7章 面向对象(上) 139
7.1 Swift的面向对象支持 140
7.1.1 面向对象概述 140
7.1.2 Swift的面向对象类型 140
7.2 枚举 141
7.2.1 定义枚举 141
7.2.2 枚举值和switch语句 143
7.2.3 原始值 144
7.2.4 关联值 145
7.3 类和结构体 147
7.3.1 定义结构体和类 147
7.3.2 创建实例 151
7.3.3 值类型与引用类型 152
7.3.4 引用类型的比较 154
7.3.5 self关键字 156
7.3.6 类和结构体的选择 158
7.4 存储属性 159
7.4.1 实例存储属性与实例变量 159
7.4.2 结构体常量与实例属性 160
7.4.3 延迟存储属性 160
7.5 计算属性 161
7.5.1 定义计算属性 162
7.5.2 setter方法简化 164
7.5.3 只读的计算属性 164
7.6 属性观察者 165
7.7 方法 167
7.7.1 方法的所属性 167
7.7.2 将方法转换为函数 168
7.7.3 方法的外部形参名 169
7.7.4 Swift方法的命名习惯 171
7.7.5 值类型的可变方法 172
7.7.6 属性和方法的统一 174
7.8 下标 175
7.8.1 下标的基本用法 175
7.8.2 下标重载 178
7.9 可选链 180
7.9.1 使用可选链代替强制解析 180
7.9.2 使用可选链调用方法 182
7.9.3 使用可选链调用下标 183
7.10 类型属性和类型方法 183
7.10.1 类型成员的修饰符 184
7.10.2 值类型的类型属性 184
7.10.3 类的类型属性 185
7.10.4 值类型的类型方法 186
7.10.5 类的类型方法 186
7.11 构造器 187
7.11.1 类和结构体的默认构造器 187
7.11.2 构造器的外部形参名 188
7.11.3 在构造过程中常量属性是可修改的 190
7.11.4 使用闭包或函数为属性设置初始值 191
7.11.5 值类型的构造器重载 192
7.12 可能失败的构造器 194
7.12.1 结构体与可能失败的构造器 194
7.12.2 枚举与可能失败的构造器 195
7.13 本章小结 196
第8章 面向对象(下) 197
8.1 继承 198
8.1.1 继承的特点 198
8.1.2 重写父类的方法 199
8.1.3 重写父类的属性 200
8.1.4 重写属性观察者 201
8.1.5 重写父类的下标 202
8.1.6 使用final防止重写 203
8.2 类的构造与析构 204
8.2.1 类的指定构造器和便利构造器 205
8.2.2 类的构造器链 206
8.2.3 两段式构造 208
8.2.4 构造器的继承和重写 212
8.2.5 类与可能失败的构造器 215
8.2.6 可能失败的构造器的传播 216
8.2.7 重写可能失败的构造器 217
8.2.8 子类必须包含的构造器 219
8.2.9 析构器 220
8.3 多态 221
8.3.1 多态性 221
8.3.2 使用is运算符检查类型 223
8.3.3 使用as运算符向下转型 223
8.3.4 Any和AnyObject 226
8.4 嵌套类型 226
8.5 扩展 227
8.5.1 使用扩展添加属性 228
8.5.2 使用扩展添加方法 230
8.5.3 使用扩展添加可变方法 231
8.5.4 使用扩展添加构造器 232
8.5.5 使用扩展添加下标 232
8.5.6 使用扩展添加嵌套类型 233
8.6 协议 233
8.6.1 规范、接口与协议语法 233
8.6.2 协议指定的属性要求 235
8.6.3 协议指定的方法要求 238
8.6.4 协议指定的可变方法要求 240
8.6.5 协议指定的下标要求 241
8.6.6 协议指定的构造器要求 243
8.6.7 使用协议作为类型 245
8.6.8 合成协议 246
8.6.9 通过扩展为已有的类型添加协议 247
8.6.10 唯类(Class-Only)协议 248
8.6.11 可选协议 249
8.6.12 输出实例和Printable协议 251
8.6.13 使用自定义类型作为字典的key 252
8.7 隐藏与封装 255
8.7.1 理解封装 255
8.7.2 访问控制符 256
8.7.3 访问控制语法 257
8.7.4 使用访问权限定义类型 258
8.7.5 子类的访问权限 260
8.7.6 常量、变量、属性、下标的访问权限 260
8.7.7 构造器的访问权限 262
8.7.8 协议的访问权限 262
8.7.9 扩展的访问权限 262
8.7.10 类型别名的访问权限 263
8.8 Swift内存管理 263
8.8.1 理解自动引用计数(ARC) 263
8.8.2 强引用循环 265
8.8.3 使用弱引用解决强引用循环 267
8.8.4 使用无主引用解决强引用循环 269
8.8.5 闭包与对象的强引用循环 271
8.8.6 使用弱引用或无主引用解决闭包的强引用循环 272
8.9 Swift面向对象语法总结 273
8.10 本章小结 274
第9章 泛型 275
9.1 泛型的作用 276
9.2 泛型函数 277
9.2.1 定义泛型函数 277
9.2.2 定义多个类型参数 278
9.3 泛型类型 280
9.3.1 定义泛型类型 280
9.3.2 从泛型类派生子类 281
9.3.3 扩展泛型类型 282
9.4 类型约束 283
9.5 关联类型 285
9.5.1 使用关联类型 285
9.5.2 扩展已有类型来确定关联类型 287
9.6 where子句 287
9.7 本章小结 289
第10章 运算符函数 290
10.1 运算符重载 291
10.2 前置和后置运算符 293
10.3 扩展后的赋值运算符 295
10.4 比较运算符 295
10.5 自定义运算符 296
10.5.1 开发自定义运算符 297
10.5.2 自定义运算符的结合性和优先级 298
10.6 本章小结 299
第11章 Foundation框架详解 300
11.1 包装类 301
11.1.1 它们不是包装类 301
11.1.2 NSValue和NSNumber 302
11.2 字符串(NSString与NSMutableString) 303
11.2.1 NSString的常用功能 303
11.2.2 可变字符串(NSMutableString) 305
11.3 日期与时间 306
11.3.1 日期与时间(NSDate) 306
11.3.2 日期格式器(NSDateFormatter) 307
11.3.3 日历(NSCalendar)与日期组件(NSDateComponents) 309
11.4 数组(NSArray与NSMutableArray) 310
11.4.1 NSArray的功能与用法 310
11.4.2 对集合元素整体调用方法 313
11.4.3 对NSArray进行排序 314
11.4.4 使用枚举器遍历NSArray集合元素 315
11.4.5 可变数组(NSMutableArray) 316
11.5 集合(NSSet与NSMutableSet) 317
11.5.1 NSSet的功能与用法 317
11.5.2 NSSet判断集合元素重复的标准 320
11.5.3 NSMutableSet的功能与用法 323
11.5.4 NSCountedSet的功能与用法 324
11.6 有序集合(NSOrderedSet与NSMutableOrderedSet) 325
11.7 字典(NSDictionary与NSMutableDictionary) 326
11.7.1 NSDictionary的功能与用法 327
11.7.2 对NSDictionary的key排序 330
11.7.3 对NSDictionary的key进行过滤 331
11.7.4 NSMutableDictionary的功能与用法 332
11.8 本章小结 333
第12章 使用Swift开发iOS应用 334
12.1 从iOS项目开始 335
12.1.1 iOS项目包含的文件 335
12.1.2 Interface Builder简介 336
12.1.3 添加控件 338
12.1.4 修改控件属性 339
12.1.5 UIView支持的属性 340
12.1.6 UILabel支持的属性 343
12.2 MVC 345
12.2.1 程序入口和应用程序代理 345
12.2.2 理解iOS的MVC 347
12.2.3 掌握UIViewController控制器 348
12.3 事件机制 350
12.3.1 程序获取控件的两种方式 350
12.3.2 事件处理的3种方式 356
12.4 代码控制UI界面 362
12.4.1 不使用界面设计文件开发UI界面 362
12.4.2 使用代码创建UI界面 364
12.4.3 自定义UI控件 366
12.5 本章小结 369
第13章 Objective-C与Swift混编 370
13.1 Swift调用Objective-C 371
13.1.1 创建Swift项目 371
13.1.2 添加Objective-C类 372
13.1.3 调用Objective-C类 374
13.2 Objective-C调用Swift 376
13.2.1 为Objective-C项目添加Swift类 376
13.2.2 调用Swift类 378
13.3 本章小结 379
第14章 俄罗斯方块 380
14.1 俄罗斯方块简介 381
14.2 开发游戏界面 382
14.2.1 界面布局设计 382
14.2.2 开发游戏界面控件 385
14.3 俄罗斯方块的数据模型 387
14.3.1 定义数据模型 387
14.3.2 初始化游戏状态数据 388
14.4 实现游戏逻辑 391
14.4.1 处理方块掉落 391
14.4.2 处理方块左移 396
14.4.3 处理方块右移 397
14.4.4 处理方块旋转 398
14.4.5 启动游戏 401
14.5 本章小结 402
疯狂Swift讲义
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×
亲爱的云图用户,
光盘内的文件都可以直接点击浏览哦
无需下载,在线查阅资料!