第1章 Swift语言基础 1
1.1 Swift概述 1
1.1.1 Swift的创造者 1
1.1.2 Swift的优势 2
1.2 搭建开发环境 3
1.2.1 Xcode介绍 3
1.2.2 下载并安装Xcode 7 4
1.3 使用Xcode开发环境 7
1.3.1 改变公司名称 7
1.3.2 通过搜索框缩小文件范围 8
1.3.3 格式化代码 8
1.3.4 代码缩进和自动完成 9
1.3.5 文件内查找和替代 10
1.3.6 快速定位到代码行 13
1.3.7 快速打开文件 13
1.3.8 使用书签 14
1.3.9 自定义导航条 15
1.3.10 使用Xcode帮助 16
1.3.11 调试代码 17
1.4 创建一个iOS 9项目 18
1.5 打开一个现有的iOS 9项目 23
1.6 第一段Swift程序 24
实例1-1 使用Xcode 7开发第一个Swift程序 24
第2章 Swift的基础语法 31
2.1 分号 31
2.2 空白 32
2.3 标识符和关键字 32
2.3.1 标识符 32
2.3.2 关键字 33
2.4 常量和变量 34
2.4.1 声明常量 34
实例2-1 输出常量的值 35
2.4.2 声明变量 35
实例2-2 输出变量的值 37
2.4.3 输出常量和变量 39
实例2-3 计算一个圆的面积 39
2.4.4 标注类型 40
实例2-4 省略类型声明 40
2.4.5 常量和变量的命名规则 41
实例2-5 修改变量值 41
2.5 注释 42
2.5.1 注释的规则 42
实例2-6 演示注释的用法 43
2.5.2 使用注释的注意事项 43
2.6 数据类型 44
2.6.1 数据类型的分类 45
2.6.2 类型安全和类型推断 45
2.6.3 类型注解 46
2.6.4 类型标识符 46
2.6.5 元组类型 47
2.6.6 函数类型 47
2.6.7 数组类型 48
2.6.8 可选类型 48
2.6.9 隐式解析可选类型 49
2.6.10 协议合成类型 50
2.6.11 元类型 50
2.6.12 类型继承子句 50
2.6.13 类型推断 51
2.7 最基本的数值类型 51
2.7.1 整数 52
实例2-7 输出整数 53
2.7.2 浮点数 54
实例2-8 使用浮点数 54
2.8 字面量 55
2.8.1 数值型字面量 55
实例2-9 使用数值型字面量 56
2.8.2 整型字面量 56
实例2-10 输出不同进制的17 57
2.8.3 浮点型字面量 57
2.8.4 文本型字面量 58
实例2-11 演示特殊符号的使用 59
2.8.5 数值的可读性 59
2.9 数值型类型转换 60
2.9.1 整数转换 60
2.9.2 整数和浮点数转换 60
实例2-12 演示整数和浮点数转换 61
2.9.3 进制的转换 61
2.10 类型别名 62
实例2-13 演示类型别名的用法 63
2.11 布尔值 63
2.12 元组 65
2.12.1 定义元组类型 65
2.12.2 获取元组中的元素值 66
实例2-14 演示元组的用法 66
2.13 可选类型 67
2.13.1 if语句以及强制解析 68
实例2-15 演示if语句的强制解析 68
2.13.2 可选绑定 68
实例2-16 使用可选绑定重写实例2-15 69
2.13.3 nil空值 69
2.13.4 隐式解析可选类型 70
2.14 断言 71
2.14.1 使用断言进行调试 71
2.14.2 何时使用断言 72
2.15 综合演练 72
实例2-17 综合演示Swift各个基本语法的用法 72
第3章 字符、字符串和运算符 74
3.1 字符和字符串 74
3.1.1 字符和字符串基础 74
3.1.2 字符串字面量(String Literals) 75
实例3-1 演示各种特殊字符的使用过程 75
3.1.3 初始化空字符串 76
实例3-2 初始化空字符串实例演示 76
3.1.4 字符串可变性 76
实例3-3 使用换行符、双引号和单引号 77
3.1.5 字符串是值类型 77
3.1.6 字符串遍历 78
实例3-4 遍历字符串实例演示 78
3.1.7 计算字符数量 79
实例3-5 设置字符值 79
3.1.8 连接字符串和字符 80
实例3-6 连接字符串和字符实例演示 80
3.1.9 字符串插值 81
3.1.10 比较字符串 81
实例3-7 验证字符串是否相等 82
实例3-8 实现字符串的大小写转换 83
3.2 运算符概述 84
3.3 赋值运算符 85
3.3.1 基本赋值运算符 85
实例3-9 使用基本的赋值运算符 86
3.3.2 复合赋值 86
实例3-10 使用复合赋值运算符 87
3.4 算数运算符 87
3.4.1 单目运算符 88
实例3-11 使用单目运算符 89
3.4.2 双目运算符 89
实例3-12 使用双目运算符 90
3.4.3 求余运算 90
实例3-13 使用求余运算符 91
3.4.4 浮点数求余计算 91
实例3-14 使用浮点数求余运算符 92
3.5 比较运算符(关系运算符) 92
实例3-15 使用比较运算符 93
3.6 三元条件运算 93
实例3-16 使用三元条件运算符 94
3.7 区间运算符 94
3.7.1 闭区间运算符 95
实例3-17 使用闭区间运算符 95
3.7.2 半闭区间运算符 95
实例3-18 使用半闭区间运算符 95
3.8 逻辑运算 96
3.8.1 逻辑非 96
3.8.2 逻辑与 97
3.8.3 逻辑或 97
3.8.4 组合逻辑 97
3.8.5 使用括号设置运算优先级 98
实例3-19 使用括号设置运算优先级 98
3.9 位运算符 99
3.9.1 按位取反运算符 99
3.9.2 按位与运算符 100
3.9.3 按位或运算符 101
3.9.4 按位异或运算符 102
3.9.5 按位左移/右移运算符 103
实例3-20 使用左移/右移运算符 105
3.10 溢出运算符 106
实例3-21 使用溢出运算符 106
3.11 运算符的优先级和结合性 109
实例3-22 演示运算符的优先级和结合性 111
第4章 集合类型 113
4.1 数组 113
4.1.1 定义数组 113
实例4-1 定义一个数组 114
4.1.2 数组构造语句 114
4.1.3 访问和修改数组 115
实例4-2 演示对数组的基本操作 117
4.1.4 数组的遍历 118
实例4-3 实现对数组的遍历 119
4.1.5 创建并构造一个数组 119
实例4-4 演示创建并且构造一个数组 120
4.2 字典 122
4.2.1 字典字面量 122
实例4-5 创建一个字典 123
4.2.2 读取和修改字典 124
实例4-6 演示读取并修改字典 124
实例4-7 对字典数据进行操作 125
实例4-8 添加或修改字典数据 126
实例4-9 在字典中移除键值对 127
4.2.3 字典遍历 128
实例4-10 在字典中遍历数据 128
4.2.4 创建一个空字典 129
实例4-11 实现字典复制操作 130
4.2.5 字典类型的散列值 130
4.3 集合的可变性 131
4.4 综合演练 131
实例4-12 综合演练字典的操作 131
第5章 语句和流程控制 133
5.1 Swift语句概述 133
5.1.1 循环语句 134
实例5-1 简单演示使用for语句遍历数组 134
实例5-2 简单演示使用while语句 136
实例5-3 演示while和for的对比 136
5.1.2 分支条件语句 138
实例5-4 简单演示使用if分支语句 138
实例5-5 简单演示使用switch分支语句 140
5.1.3 带标签的语句 141
5.1.4 控制传递语句 142
5.2 for循环 143
5.2.1 for-in 143
实例5-6 for in语句应用:打印10以内偶数 144
5.2.2 for条件递增 145
实例5-7 使用for条件递增语句 146
5.3 while循环 147
5.3.1 While语句 147
实例5-8 while循环语句应用:100以内10的倍数 149
5.3.2 do-while语句 149
实例5-9 do-while循环语句应用:蛇和梯子小游戏 150
5.4 条件语句 151
5.4.1 if语句 151
实例5-10 if语句应用:判断温度 151
5.4.2 switch语句 152
实例5-11 switch语句应用:匹配名为SomeCharacter的小写字符 153
5.5 控制转移语句 155
5.5.1 continue语句 155
5.5.2 break语句 155
实例5-12 简单演示使用break语句 157
5.5.3 贯穿(fallthrough) 157
5.5.4 带标签的语句(labeled statements) 158
第6章 函数 161
6.1 函数的定义 161
6.1.1 定义无参函数 162
6.1.2 定义有参函数 162
6.2 函数声明 164
6.2.1 函数声明的格式 164
实例6-1 声明一个函数 165
6.2.2 声明中的参数名 165
实例6-2 用“…”获取不固定个数参数 166
6.2.3 声明中的特殊类型参数 167
6.3 函数调用 167
6.3.1 调用函数的格式 167
实例6-3 调用定义的函数 168
6.3.2 数调用的方式 169
实例6-4 通过函数比较两个数的大小 169
6.4 函数参数 170
6.4.1 多重输入参数 170
实例6-5 演示多重输入参数的用法 171
6.4.2 无参函数(Functions Without Parameters) 171
6.4.3 无返回值函数 171
6.5 返回值 172
实例6-6 演示函数的返回值的用法 173
6.6 函数参数的名称 174
6.6.1 外部参数名 174
6.6.2 简写外部参数名 175
6.6.3 默认参数值 175
6.6.4 默认值参数的外部参数名 176
6.6.5 可变参数 177
6.6.6 常量参数和变量参数 178
6.6.7 输入/输出参数 179
实例6-7 编写函数求平均值 180
6.6.8 扩展参数 180
6.7 函数类型 181
6.7.1 使用函数类型 182
6.7.2 函数类型作为参数类型 182
实例6-8 演示在函数中使用另一个函数作为参数 183
6.7.3 函数类型作为返回类型 183
实例6-9 演示将函数类型作为返回类型 184
6.8 嵌套函数 185
实例6-10 演示嵌套函数的用法 186
6.9 函数和闭包 186
实例6-11 重写一个闭包来对所有奇数返回0 187
实例6-12 在函数中定义函数 187
6.1 0内置库函数 189
实例6-13 查询“.”的位置 191
第7章 类 193
7.1 类和结构体基础 193
7.1.1 定义类和结构体 195
7.1.2 声明结构体字段 196
实例7-1 演示结构体的用法 196
7.2 类的成员 197
7.2.1 最简单的数据成员 198
7.2.2 最重要的函数成员 198
7.3 结构体成员 199
7.3.1 字段 199
实例7-2 创建结构体变量赋初始值 199
7.3.2 函数 200
实例7-3 在结构体中直接存储方法 200
7.3.3 属性 201
实例7-4 演示结构体属性的用法 201
7.4 类和结构体实例 201
实例7-5 定义并使用类的实例 202
7.5 类的继承 202
7.5.1 类的层次结构 202
7.5.2 继承概述 203
7.5.3 定义子类 203
实例7-6 创建StudentLow的子类StudentHight 205
7.5.4 重写 206
实例7-7 演示面向对象、继承、重写和构造 209
7.5.5 继承规则 210
7.6 属性访问 210
实例7-8 演示类中的属性、常量和变量 210
第8章 构造函数和析构函数 212
8.1 构造函数概述 212
8.1.1 结构体中的构造函数 213
实例8-1 使用有参数构造函数 213
实例8-2 演示使用加了“_”标记的参数构造函数 214
8.1.2 类中的构造函数 215
实例8-3 演示类中的构造函数 215
8.2 构造过程详解 217
8.2.1 为存储型属性赋初始值 218
实例8-4 演示为存储型属性赋初始值 219
8.2.2 定制化构造过程 219
8.2.3 默认构造器 221
8.2.4 值类型的构造器代理 222
8.2.5 类的继承和构造过程 224
8.2.6 可失败构造器 231
8.3 析构函数 233
8.3.1 析构过程原理 233
实例8-5 在Swift中使用析构函数 233
8.3.2 析构函数操作 234
8.4 综合演练 236
实例8-6 声明并调用Swift中各种常用的函数 236
第9章 泛型 243
9.1 泛型所解决的问题 243
实例9-1 定义泛型 244
9.2 泛型函数 245
9.3 类型参数 246
实例9-2 使用函数和类支持泛型 246
9.4 命名类型参数和泛型类型 249
9.5 扩展一个泛型 252
9.6 类型约束 252
9.6.1 类型约束语法 253
9.6.2 类型约束行为 253
9.7 关联类型 255
9.7.1 关联类型行为 255
9.7.2 扩展一个存在的类型为一指定关联类型 257
9.8 Where语句 257
第10章 协议和扩展 259
10.1 协议的语法 259
实例10-1 定义并使用协议 260
10.2 对属性的规定 261
10.3 对方法的规定 263
10.4 对突变方法的规定 263
10.5 协议类型 264
10.6 委托(代理)模式 266
10.7 在扩展中添加协议成员 268
10.8 通过扩展补充协议声明 269
10.9 集合中的协议类型 269
10.10 协议的继承 269
10.11 协议合成 270
10.12 检验协议的一致性 271
10.13 对可选协议的规定 272
10.14 扩展详解 274
10.14.1 扩展语法 274
10.14.2 计算型属性 275
实例10-2 演示计算型属性的用法 275
10.14.3 构造器 276
实例10-3 演示构造器的用法 277
10.14.4 扩展方法 278
实例10-4 演示扩展方法的用法 278
10.14.5 下标 279
实例10-5 演示下标的用法 279
10.14.6 嵌套类型 280
10.14.7 扩展字符串的用法 281
实例10-6 演示扩展字符串的用法 281
第11章 Swift和Objective-C混编开发 282
11.1 在同一个工程中使用Swift和Objective-C 282
11.1.1 Mix and Match概述 282
11.1.2 在同一个应用的target中导入 283
11.1.3 在同一个Framework的target中导入 284
11.1.4 导入外部Framework 285
11.1.5 在Objective-C中使用Swift 285
11.1.6 实践练习 286
实例11-1 在Objective-C中调用Swift 286
11.2 Swift调用C语言函数 288
11.2.1 调用简单的C语言函数 288
实例11-2 在Swift中调用简单的C语言函数 288
11.2.2 增加一个C语言键盘输入函数 292
实例11-3 演示增加C语言键盘输入函数 292
11.3 Swift调用C语言函数的综合演练 293
实例11-4 综合演练调用C语言中的各种函数 293
第12章 Xcode Interface Builder界面开发 297
12.1 Interface Builder基础 297
12.1.1 Interface Builder的作用 297
12.1.2 Interface Builder的新特色 298
12.2 Interface Builder采用的方法 300
12.3 Interface Builder的故事板 300
12.3.1 推出的背景 300
12.3.2 故事板的文档大纲 301
12.3.3 文档大纲的区域对象 303
12.4 创建一个界面 303
12.4.1 对象库 304
12.4.2 将对象加入视图中 305
12.4.3 使用IB布局工具 305
12.5 定制界面外观 308
12.5.1 使用属性检查器 309
12.5.2 设置辅助功能属性 309
12.5.3 测试界面 310
第13章 使用Xcode编写MVC程序 312
13.1 MVC模式基础 312
13.1.1 诞生背景 312
13.1.2 分析结构 313
13.1.3 MVC的特点 313
13.1.4 使用MVC实现程序设计的结构化 314
13.2 Xcode中的MVC 314
13.2.1 原理 314
13.2.2 模板就是给予MVC的 315
13.3 在Xcode中实现MVC 316
13.3.1 视图 316
13.3.2 视图控制器 316
13.4 数据模型 318
13.5 综合演练 319
实例13-1 使用UISwitch控件控制是否显示密码明文 319
第14章 基本组件 324
14.1 文本框(UITextField) 324
14.1.1 文本框基础 324
14.1.2 实践练习 325
实例14-1 为TextField添加震动效果 325
14.2 文本视图(UITextView) 326
14.2.1 文本视图基础 326
14.2.2 实践练习 327
实例14-2 显示UITextView中的文本 327
14.3 标签(UILabel) 329
14.3.1 标签(UILabel)的属性 329
14.3.2 实践练习 329
实例14-3 使用UILabel控件输出一个指定样式的文本 329
14.4 按钮(UIButton) 331
14.4.1 按钮基础 331
14.4.2 实践练习 332
实例14-4 自定义一个按钮 332
14.5 滑块控件(UISlider) 334
实例14-5 使用UISlider控件 334
14.6 步进控件(UIStepper) 337
14.6.1 步进控件基础 337
14.6.2 实践练习 338
实例14-6 使用步进控件自动增减数字 338
14.7 图像视图控件(UIImageView) 339
14.7.1 UIImageView的常用操作 340
14.7.2 实践练习 343
实例14-7 使用UIImageView控件 344
14.8 开关控件(UISwitch) 346
14.8.1 开关控件基础 346
14.8.2 实践练习 346
实例14-8 使用UISwitch控件控制是否显示密码明文 346
14.9 分段控件(UISegmentedControl) 349
14.9.1 分段控件基础 349
14.9.2 实践练习 350
实例14-9 自定义UISegmentedControl控件的样式 350
第15章 提醒、操作表、工具栏和日期选择器 351
15.1 提醒视图(UIAlertView) 351
15.1.1 UIAlertView基础 351
15.1.2 实践练习 352
实例15-1 演示如何使用UIAlertView控件 352
15.2 操作表(UIActionSheet) 353
实例15-2 使用UIActionsheet实现一个分享App 353
15.3 工具栏(UIToolbar) 356
15.3.1 工具栏基础 356
15.3.2 自定义工具栏 358
实例15-3 使用UIToolbar控件制作自定义工具栏 358
15.4 选择器视图(UIPickerView) 366
15.4.1 选择器视图基础 366
15.4.2 实践练习 367
实例15-4 使用UIPickerView实现倒计时器 367
15.5 日期选择(UIDatePicker) 376
15.5.1 UIDatePicker基础 376
15.5.2 实践练习 377
实例15-5 演示如何使用UIDatePicker控件 377
第16章 视图控制处理 382
16.1 Web视图控件(UIWebView) 382
16.1.1 Web视图基础 382
16.1.2 实践练习 383
实例16-1 加载指定的HTML网页并自动播放网页音乐 383
16.2 可滚动视图控件(UIScrollView) 386
16.2.1 UIScrollView的基本用法 386
16.2.2 实践练习 388
实例16-2 演示如何使用UIScrollView控件 388
16.3 翻页控件(UIPageControl) 390
16.3.1 PageControll控件基础 390
16.3.2 实践练习 391
实例16-3 使用UIPageControl控件设置四个界面 391
16.4 表视图(UITable) 394
16.4.1 表视图基础 394
16.4.2 添加表视图 395
16.4.3 UITableView详解 397
16.4.4 实践练习 397
实例16-4 在表视图中动态操作单元格 397
第17章 活动指示器、进度条和检索条 403
17.1 活动指示器(UIActivityIndicatorView) 403
17.1.1 活动指示器基础 403
17.1.2 实践练习 403
实例17-1 演示如何使用UIActivityIndicatorView控件 404
17.2 进度条(UIProgressView) 405
17.2.1 进度条基础 405
17.2.2 实践练习 406
实例17-2 实现自定义进度条效果 406
17.3 检索条(UISearchBar) 412
17.3.1 检索条基础 412
17.3.2 实践练习 413
实例17-3 演示如何使用UISearchBar控件 413
第18章 UIView和视图控制器 416
18.1 UIView基础 416
18.1.1 UIView的结构 417
18.1.2 视图架构 418
18.1.3 视图层次和子视图管理 419
18.1.4 视图绘制周期 420
18.1.5 实践练习 420
实例18-1 在UIView中创建一个滚动图片浏览器 420
18.2 导航控制器(UIViewController)简介 427
18.2.1 UIViewController基础 427
18.2.2 实践练习 428
实例18-2 使用UIViewController控件创建会员登录系统 428
18.3 使用UINavigationController 431
18.3.1 导航栏、导航项和栏按钮项 433
18.3.2 UINavigationController详解 433
18.3.3 在故事板中使用导航控制器 434
18.3.4 实践练习 437
实例18-3 创建主从关系的“主-子”视图 437
18.4 选项卡栏控制器 439
18.4.1 选项卡栏和选项卡栏项 439
18.4.2 在选项卡栏控制器管理的场景之间共享数据 441
18.4.3 UITabBarController使用详解 441
18.4.4 实践练习 443
实例18-4 开发一个界面选择器 443
第19章 图形、图像、图层和动画 446
19.1 图形处理 446
19.1.1 iOS的绘图机制 446
19.1.2 实践练习 447
实例19-1 使用Quartz 2D绘制移动的曲线 447
19.2 图层 450
19.2.1 视图和图层 451
19.2.2 实践练习 451
实例19-2 演示CALayers图层的用法 451
19.3 实现动画 453
19.3.1 UIImageView动画 453
19.3.2 视图动画UIView 454
19.3.3 Core Animation详解 454
19.3.4 实践练习 455
实例19-3 图形图像的人脸检测处理 455
第20章 多媒体应用 461
20.1 声音服务 461
20.1.1 声音服务基础 462
20.1.2 实践练习 462
实例20-1 使用AudioToolbox播放列表中的音乐 462
20.2 提醒和震动 474
20.2.1 播放提醒音 474
20.2.2 实践练习 474
实例20-2 演示两种震动 474
20.3 Media Player框架 476
20.3.1 Media Player框架中的类 476
20.3.2 实践练习 476
实例20-3 播放指定的视频 476
20.4 AV Foundation框架 479
20.4.1 准备工作 480
20.4.2 实践练习 480
实例20-4 使用AVAudioPlayer播放和暂停指定的MP3 480
20.5 图像选择器(UIImagePickerController) 482
20.5.1 使用图像选择器 482
20.5.2 实践练习 482
实例20-5 实现ImagePicker功能 482
第21章 定位处理 486
21.1 Core Location框架 486
21.1.1 Core Location基础 486
21.1.2 实践练习 487
实例21-1 定位显示当前的位置信息 487
21.2 获取位置 493
21.2.1 位置管理器委托 493
21.2.2 处理定位错误 494
21.2.3 位置精度和更新过滤器 494
21.2.4 获取航向 494
21.3 地图功能 495
21.3.1 Map Kit基础 495
21.3.2 为地图添加标注 496
21.3.3 实践练习 496
实例21-2 在地图中定位当前的位置信息 496
第22章 和硬件之间的操作 500
22.1 CoreMotion框架 500
22.1.1 CoreMotion框架介绍 500
22.1.2 加速计基础 501
22.1.3 陀螺仪 502
22.1.4 实践练习 502
实例22-1 使用iPhone中的Motion传感器 502
22.2 访问朝向和运动数据 505
22.2.1 通过UIDevice请求朝向通知 505
22.2.2 使用Core Motion读取加速计和陀螺仪数据 505
22.2.3 实践练习 506
实例22-2 传感器综合练习:海拔和距离测试器 506
第23章 游戏开发 518
23.1 Sprite Kit框架基础 518
23.1.1 Sprite Kit的优点和缺点 518
23.1.2 Sprite Kit、Cocos2D、Cocos2D-X和Unity的选择 519
23.2 实践练习 519
实例23-1 开发一个四子棋游戏 519
第24章 WatchKit智能手表开发 535
24.1 Apple Watch介绍 535
24.2 WatchKit开发详解 537
24.2.1 WatchKit架构 537
24.2.2 WatchKit布局 540
24.2.3 Glances和Notifications 540
24.2.4 WatchApp的生命周期 540
24.3 开发Apple Watch应用程序 542
24.3.1 创建Watch应用 542
24.3.2 创建Glance界面 542
24.3.3 自定义通知界面 543
24.3.4 配置Xcode项目 543
24.4 实践练习 546
实例24-1 开发一个综合性智能手表管理系统 546
24.4.1 系统介绍 547
24.4.2 创建工程项目 547
24.4.3 iPhone端的具体实现 549
24.4.4 Watch端的具体实现 551
第25章 企业客服即时通信系统(第三方框架+云存储) 559
25.1 即时通信系统介绍 559
25.2 系统模块结构 560
25.3 创建工程 561
25.4 使用CocoaPods配置第三方框架 562
25.4.1 什么是CocoaPods 562
25.4.2 CocoaPods的核心组件 562
25.4.3 本项目的CocoaPods 562
25.5 用户登录 563
25.5.1 登录主界面 563
25.5.2 新用户注册 568
25.6 系统聊天 571
25.7 UI界面优化 573
25.7.1 文本框优化 573
25.7.2 HUD优化 575
25.8 使用第三方框架 576
25.9 使用云存储保存系统数据 580
25.10 执行效果 581