书籍详情
Swift开发标准教程
作者:张明,吴琼,陈瑶
出版社:人民邮电出版社
出版时间:2016-09-01
ISBN:9787115425027
定价:¥59.80
购买这本书可以去
内容简介
本书共分为15章,主要内容包括编写Swift开发环境配置、Swift语言基础、语句和表达式、集合类型、程序控制结构、函数和闭包、类、继承、枚举和结构、构造器和析构器、扩展和协议、Swift语言的其他主题、使用Swift开发iOS应用、测试和发布App以及综合实例打砖块游戏等内容。书中对Swift语言中的一些开发技巧进行了展示。本书内容丰富、结构新颖、难度适中、实用性强,可作为普通高等院校Swift程序设计课程的教材,也可供Swift开发初学人员参考阅读。
作者简介
程序设计类畅销图书作者,擅长程序设计、移动开发类选题。 其编写的精通系列,创造了数十万销量的销售佳绩。
目录
第1章 编写第一个Swift程序 1
1.1 初识Swift 1
1.1.1 Swift的发展 1
1.1.2 Swift的特点 1
1.1.3 Swift语言的转换 2
1.2 构建开发环境 2
1.2.1 申请苹果账号 3
1.2.2 安装Xcode 6
1.2.3 更新新组件和文档 9
1.3 编写第一个程序 11
1.3.1 创建项目 11
1.3.2 Xcode界面介绍 13
1.3.3 编译和运行 14
1.3.4 编写代码 15
1.4 Swift代码分析 15
1.4.1 代码构成 15
1.4.2 标识符 16
1.4.3 关键字 16
1.4.4 注释 17
1.5 调试 18
1.6 使用帮助文档 19
1.7 上机实践 20
第2章 Swift语言基础 21
2.1 常量变量 21
2.1.1 常量 21
2.1.2 变量 21
2.1.3 为声明的变量和常量指定数据
类型 22
2.2 简单数据类型 22
2.2.1 整数 22
2.2.2 整型 23
2.2.3 浮点类型 24
2.2.4 布尔类型 25
2.2.5 可选类型 25
2.3 字面值 26
2.3.1 整型字面值 26
2.3.2 浮点类型的字面值 26
2.3.3 布尔类型的字面值 28
2.4 高级数据类型——元组 28
2.5 类型别名 29
2.6 字符和字符串 29
2.6.1 字符类型与字面值 29
2.6.2 字符串类型与字面值 30
2.6.3 初始化空字符串 31
2.6.4 字符串连接 31
2.6.5 字符计数 32
2.6.6 判断字符串 32
2.6.7 大小写转换 34
2.6.8 插入和删除 35
2.7 编码格式Unicode 37
2.7.1 什么是Unicode 37
2.7.2 字符串的Unicode表示形式 38
2.8 综合案例 40
2.8.1 为圆周率3.14159265359指定数据
类型 40
2.8.2 组成字符串,并插入特殊符号 40
2.9 上机实践 41
第3章 语句和表达式 42
3.1 语句 42
3.2 运算符与表达式 42
3.2.1 常用术语——元 42
3.2.2 赋值运算符和表达式 43
3.2.3 算术运算符和表达式 43
3.2.4 求余运算符和表达式 46
3.2.5 自增自减运算符和表达式 47
3.2.6 一元负号运算符 49
3.2.7 一元正号运算符 50
3.2.8 位运算符 50
3.2.9 溢出运算符 55
3.2.10 比较运算符和表达式 57
3.2.11 三元条件运算符和表达式 58
3.2.12 逻辑运算符和表达式 58
3.2.13 范围运算符 61
3.2.14 复合赋值运算符和表达式 62
3.2.15 求字节运算符和表达式 63
3.2.16 强制解析 63
3.2.17 空合运算符 63
3.3 数值类型转换 64
3.3.1 整数的转换 64
3.2.2 整数和浮点数的转换 65
3.4 综合案例 66
3.4.1 水仙花数 66
3.4.2 将7489逆序输出 66
3.5 上机实践 67
第4章 集合类型 68
4.1 数组 68
4.1.1 数组字面量 68
4.1.2 数组的声明 68
4.1.3 数组的初始化 69
4.2 数组的操作 71
4.2.1 获取数组中元素个数 71
4.2.2 判断数组是否为空 71
4.2.3 在末尾添加一个元素 72
4.2.4 插入值 73
4.2.5 读取值 74
4.2.6 修改值 74
4.2.7 删除值 75
4.3 集合 76
4.3.1 集合的声明 76
4.3.2 集合的初始化 77
4.4 集合的操作 78
4.4.1 获取集合中元素个数 78
4.4.2 判断集合是否为空 78
4.4.3 判断集合中是否包含某一值 79
4.4.4 插入值 79
4.4.5 删除值 79
4.4.6 确定集合的顺序 81
4.5 集合的基本运算 81
4.5.1 a∩b 81
4.5.2 a∪b 82
4.5.3 a-b 83
4.5.4 a-b∪b-a 83
4.6 集合间关系 84
4.6.1 相等判断 84
4.6.2 子集的判断 85
4.6.3 父集合的判断 85
4.6.4 其他判断 86
4.7 字典 86
4.7.1 字典字面量 86
4.7.2 字典的声明 87
4.7.3 字典的初始化 87
4.8 字典的操作 88
4.8.1 获取字典中的元素个数 88
4.8.2 读取键的值 88
4.8.3 添加元素 89
4.8.4 修改键关联的值 89
4.8.5 删除值 90
4.9 综合案例 91
4.9.1 求3科成绩的平均值 91
4.9.2 获取奇数月 92
4.10 上机实践 94
第5章 程序控制结构 95
5.1 顺序结构 95
5.2 选择结构——if语句 95
5.2.1 if语句 96
5.2.2 if...else语句 96
5.2.3 if...else if语句 97
5.2.4 if语句的嵌套 98
5.3 选择结构——switch语句 99
5.3.1 switch语句基本形式 99
5.3.2 switch语句的使用规则 100
5.4 循环结构——for语句 103
5.4.1 for...in循环 103
5.4.2 for-condition-increment条件循环 108
5.5 循环结构——while语句 108
5.5.1 while循环 109
5.5.2 repeat while循环 110
5.6 跳转语句 110
5.6.1 continue语句 110
5.6.2 break语句 111
5.6.3 fallthrough 112
5.7 标签语句 112
5.7.1 标签语句的定义 113
5.7.2 标签语句的使用 113
5.8 综合案例 114
5.8.1 打印九九乘法表 114
5.8.2 使用if else比较3个数值大小 115
5.8.3 计算1~100的奇数和 116
5.9 上机实践 116
第6章 函数和闭包 117
6.1 函数介绍 117
6.1.1 函数的功能 117
6.1.2 函数的形式 118
6.2 使用无参函数 118
6.2.1 无参函数的声明定义 119
6.2.2 无参函数的调用 119
6.2.3 空函数 119
6.3 使用有参函数 120
6.3.1 有参函数的声明定义 120
6.3.2 有参函数的调用 120
6.3.3 参数的注意事项 121
6.4 函数参数的特殊情况 121
6.4.1 函数参数名 122
6.4.2 指定外部参数名 122
6.4.3 忽略外部参数名 122
6.4.4 为参数设置默认值 123
6.4.5 可变参数 123
6.4.6 常量参数和变量参数 124
6.4.7 输入-输出参数 124
6.5 函数的返回值 125
6.5.1 具有一个返回值的函数 125
6.5.2 具有多个返回值的函数 126
6.5.3 可选元组返回类型 127
6.5.4 无返回值 128
6.6 函数类型 128
6.6.1 使用函数类型 129
6.6.2 使用函数类型作为参数类型 129
6.6.3 使用函数类型作为返回值类型 130
6.7 标准函数 131
6.7.1 绝对值函数abs() 131
6.7.2 最大值函数max()/最小值函数
min() 132
6.7.3 序列排序函数sortInPlace() 132
6.7.4 序列倒序函数reverse() 133
6.8 函数的嵌套 133
6.8.1 嵌套调用 134
6.8.2 递归调用 135
6.9 闭包 135
6.9.1 闭包表达式 136
6.9.2 Trailing闭包 138
6.9.3 捕获值 139
6.10 综合案例 140
6.10.1 打印金字塔 140
6.10.2 猴子吃桃 141
6.11 上机实践 142
第7章 类 143
7.1 类与对象 143
7.1.1 类的组成 143
7.1.2 创建类 143
7.1.3 实例化对象 144
7.2 属性 144
7.2.1 存储属性 144
7.2.2 计算属性 146
7.2.3 类型属性 148
7.2.4 属性监视器 150
7.3 方法 152
7.3.1 实例方法 152
7.3.2 类型方法 153
7.3.3 存储属性、局部变量和全局变量
的区别 155
7.3.4 局部变量和存储属性同名的解决
方法——self属性 156
7.4 下标脚本 157
7.4.1 定义下标脚本 157
7.4.2 调用下标脚本 157
7.4.3 使用下标脚本 158
7.5 类的嵌套 160
7.5.1 直接嵌套 160
7.5.2 多次嵌套 161
7.6 可选链接 162
7.6.1 使用可选链接调用代替强制解析 163
7.6.2 通过可选链接调用属性、下标
脚本、方法 163
7.6.3 连接多个链接 165
7.7 综合案例 166
7.7.1 收支情况 166
7.7.2 根据周长计算面积 167
7.8 上机实践 168
第8章 继承 170
8.1 为什么要使用继承 170
8.1.1 重用代码、简化代码 170
8.1.2 扩展功能 170
8.2 继承的实现 170
8.2.1 继承的定义 170
8.2.2 属性的继承 172
8.2.3 下标脚本的继承 173
8.2.4 方法的继承 174
8.3 继承的特点 174
8.3.1 多层继承 174
8.3.2 不可删除 175
8.4 重写 176
8.4.1 重写属性 176
8.4.2 重写下标脚本 178
8.4.3 重写方法 179
8.4.4 访问父类成员 180
8.4.5 阻止重写 182
8.5 类型转换 184
8.5.1 类型检查 184
8.5.2 向下转型 185
8.5.3 AnyObject和Any的类型转换 185
8.6 综合案例 187
8.7 上机实践 188
第9章 枚举和结构 189
9.1 枚举的构成 189
9.2 定义枚举 189
9.2.1 任意类型的枚举类型 189
9.2.2 指定数据类型的枚举类型 190
9.3 定义枚举的成员 190
9.3.1 定义任意类型的枚举成员 190
9.3.2 定义指定数据类型的枚举成员 191
9.3.3 定义枚举成员时的注意事项 192
9.4 实例化枚举的对象 192
9.5 枚举成员与switch匹配 192
9.6 访问枚举类型中成员的原始值 193
9.6.1 通过成员访问原始值 193
9.6.2 通过原始值访问成员 194
9.7 关联值 195
9.8 定义枚举的其他内容 195
9.8.1 定义属性 195
9.8.2 定义方法 197
9.8.3 定义下标脚本 198
9.9 递归枚举 199
9.10 结构的构成 200
9.11 结构的创建与实例化 200
9.11.1 结构的创建 200
9.11.2 结构体的实例化 200
9.12 定义结构中的内容 201
9.12.1 定义属性 201
9.12.2 定义方法 204
9.12.3 定义下标脚本 205
9.13 类、枚举、结构的区别 206
9.14 嵌套类型 206
9.15 综合案例 208
9.15.1 输出对应音符发音 208
9.15.2 根据棱长计算正方体的表面积和
体积 208
9.16 上机实践 209
第10章 构造器和析构器 210
10.1 值类型的构造器 210
10.1.1 默认构造器 210
10.1.2 自定义构造器 211
10.1.3 构造器代理 214
10.2 类的构造器 216
10.2.1 默认构造器 217
10.2.2 自定义构造器 217
10.2.3 构造器代理 220
10.2.4 类的两段式构造过程 221
10.2.5 构造器的继承和重载 222
10.2.6 必要构造器 225
10.3 可失败构造器 226
10.3.1 定义可失败构造器 226
10.3.2 枚举类型的可失败构造器 227
10.3.3 类的可失败构造器 228
10.3.4 构造失败的传递 229
10.3.5 重写一个可失败构造器 230
10.3.6 可失败构造器init! 231
10.4 构造器的特殊情况 232
10.4.1 可选属性类型 232
10.4.2 修改常量属性 232
10.5 设置默认值 233
10.5.1 在定义时直接赋值 233
10.5.2 在构造器中赋值 233
10.5.3 使用闭包设置属性的默认值 234
10.5.4 使用函数设置默认值 235
10.6 析构器 235
10.6.1 理解析构器 235
10.6.2 析构器的定义 236
10.6.3 使用析构器 236
10.6.4 使用析构器的注意事项 237
10.6.5 构造器和析构器的区别 239
10.7 综合案例 239
10.7.1 游戏属性 239
10.7.2 模拟下线通知 240
10.8 上机实践 240
第11章 扩展和协议 241
11.1 扩展 241
11.1.1 扩展的定义 241
11.1.2 扩展属性 241
11.1.3 扩展构造器 243
11.1.4 扩展方法 244
11.1.5 扩展下标脚本 246
11.1.6 扩展嵌套类型 247
11.2 协议 248
11.2.1 协议的定义 248
11.2.2 协议的实现 248
11.2.3 协议的成员声明——属性 249
11.2.4 协议的成员声明——方法 251
11.2.5 协议的成员声明——可变方法 252
11.2.6 协议的成员声明——构造器 253
11.3 可选协议 254
11.3.1 定义可选协议 254
11.3.2 声明可选成员 254
11.3.3 调用可选协议 255
11.4 使用协议 256
11.4.1 协议作为常量、变量等的数据
类型 256
11.4.2 协议作为返回值或参数类型 257
11.4.3 协议作为集合的元素类型 258
11.5 在扩展中使用协议 259
11.5.1 在扩展中实现协议 259
11.5.2 定义协议成员 259
11.5.3 扩展协议声明 260
11.6 协议的继承 260
11.7 协议合成 262
11.8 检查协议的一致性 263
11.9 委托 264
11.10 综合案例 267
11.11 上机实践 268
第12章 Swift语言的其他主题 269
12.1 自动引用计数 269
12.1.1 自动引用计数的工作机制 269
12.1.2 循环强引用的产生 270
12.1.3 循环强引用的解决方法 273
12.2 运算符重载 278
12.2.1 为什么使用运算符重载 278
12.2.2 算术运算符的重载 278
12.2.3 一元负号/正号运算符的重载 279
12.2.4 复合赋值运算符的重载 280
12.2.5 自增自减运算符的重载 281
12.2.6 比较运算符的重载 285
12.2.7 自定义运算符的重载 286
12.3 泛型 289
12.3.1 泛型函数 289
12.3.2 泛型类型 290
12.3.3 泛型类的层次结构 292
12.3.4 扩展一个泛型类型 294
12.3.5 具有多个类型参数的泛型 295
12.3.6 类型约束 295
12.3.7 关联类型 296
12.4 错误处理 300
12.4.1 抛出错误 300
12.4.2 捕获错误和处理错误 301
12.4.3 清理动作 302
12.5 综合案例 302
12.6 上机实践 303
第13章 使用Swift开发iOS
应用 304
13.1 创建项目 304
13.2 运行程序 306
13.3 模拟器的操作 307
13.3.1 模拟器与真机的区别 307
13.3.2 退出应用程序 307
13.3.3 应用程序图标的设置 307
13.3.4 语言设置 309
13.3.5 旋转 312
13.3.6 删除应用程序 312
13.4 编辑界面 313
13.4.1 界面介绍 313
13.4.2 设计界面 314
13.4.3 视图对象库的介绍 316
13.4.4 编写代码 317
13.5 上机实践 320
第14章 测试和发布App 321
14.1 测试App概述 321
14.1.1 测试驱动的软件开发流程 321
14.1.2 iOS单元测试框架 322
14.2 使用XCTest测试框架测试驱动的
软件开发案例 322
14.2.1 测试案例前期准备 322
14.2.2 添加XCTest到项目中 326
14.2.3 测试驱动的开发流程 328
14.3 发布前的准备工作 332
14.3.1 申请付费的开发者账号 332
14.3.2 申请App ID 335
14.3.3 申请证书 336
14.3.4 添加图标 343
14.3.5 调整Application Target属性 344
14.3.6 为发布进行编译 345
14.3.7 应用打包 347
14.4 进行发布 349
14.4.1 创建应用及基本信息 349
14.4.2 应用定价信息 352
14.4.3 上传应用 353
14.5 常见审核不通过的原因 357
14.6 上机实践 358
第15章 综合案例:打砖块游戏 359
15.1 功能介绍 359
15.2 界面设计 360
15.2.1 准备工作 360
15.2.2 主界面设计 361
15.2.3 游戏界面设计 362
15.2.4 游戏介绍界面设计 363
15.3 功能实现 364
15.3.1 界面之间的切换 364
15.3.2 打砖块游戏功能 368
15.4 真机测试 374
1.1 初识Swift 1
1.1.1 Swift的发展 1
1.1.2 Swift的特点 1
1.1.3 Swift语言的转换 2
1.2 构建开发环境 2
1.2.1 申请苹果账号 3
1.2.2 安装Xcode 6
1.2.3 更新新组件和文档 9
1.3 编写第一个程序 11
1.3.1 创建项目 11
1.3.2 Xcode界面介绍 13
1.3.3 编译和运行 14
1.3.4 编写代码 15
1.4 Swift代码分析 15
1.4.1 代码构成 15
1.4.2 标识符 16
1.4.3 关键字 16
1.4.4 注释 17
1.5 调试 18
1.6 使用帮助文档 19
1.7 上机实践 20
第2章 Swift语言基础 21
2.1 常量变量 21
2.1.1 常量 21
2.1.2 变量 21
2.1.3 为声明的变量和常量指定数据
类型 22
2.2 简单数据类型 22
2.2.1 整数 22
2.2.2 整型 23
2.2.3 浮点类型 24
2.2.4 布尔类型 25
2.2.5 可选类型 25
2.3 字面值 26
2.3.1 整型字面值 26
2.3.2 浮点类型的字面值 26
2.3.3 布尔类型的字面值 28
2.4 高级数据类型——元组 28
2.5 类型别名 29
2.6 字符和字符串 29
2.6.1 字符类型与字面值 29
2.6.2 字符串类型与字面值 30
2.6.3 初始化空字符串 31
2.6.4 字符串连接 31
2.6.5 字符计数 32
2.6.6 判断字符串 32
2.6.7 大小写转换 34
2.6.8 插入和删除 35
2.7 编码格式Unicode 37
2.7.1 什么是Unicode 37
2.7.2 字符串的Unicode表示形式 38
2.8 综合案例 40
2.8.1 为圆周率3.14159265359指定数据
类型 40
2.8.2 组成字符串,并插入特殊符号 40
2.9 上机实践 41
第3章 语句和表达式 42
3.1 语句 42
3.2 运算符与表达式 42
3.2.1 常用术语——元 42
3.2.2 赋值运算符和表达式 43
3.2.3 算术运算符和表达式 43
3.2.4 求余运算符和表达式 46
3.2.5 自增自减运算符和表达式 47
3.2.6 一元负号运算符 49
3.2.7 一元正号运算符 50
3.2.8 位运算符 50
3.2.9 溢出运算符 55
3.2.10 比较运算符和表达式 57
3.2.11 三元条件运算符和表达式 58
3.2.12 逻辑运算符和表达式 58
3.2.13 范围运算符 61
3.2.14 复合赋值运算符和表达式 62
3.2.15 求字节运算符和表达式 63
3.2.16 强制解析 63
3.2.17 空合运算符 63
3.3 数值类型转换 64
3.3.1 整数的转换 64
3.2.2 整数和浮点数的转换 65
3.4 综合案例 66
3.4.1 水仙花数 66
3.4.2 将7489逆序输出 66
3.5 上机实践 67
第4章 集合类型 68
4.1 数组 68
4.1.1 数组字面量 68
4.1.2 数组的声明 68
4.1.3 数组的初始化 69
4.2 数组的操作 71
4.2.1 获取数组中元素个数 71
4.2.2 判断数组是否为空 71
4.2.3 在末尾添加一个元素 72
4.2.4 插入值 73
4.2.5 读取值 74
4.2.6 修改值 74
4.2.7 删除值 75
4.3 集合 76
4.3.1 集合的声明 76
4.3.2 集合的初始化 77
4.4 集合的操作 78
4.4.1 获取集合中元素个数 78
4.4.2 判断集合是否为空 78
4.4.3 判断集合中是否包含某一值 79
4.4.4 插入值 79
4.4.5 删除值 79
4.4.6 确定集合的顺序 81
4.5 集合的基本运算 81
4.5.1 a∩b 81
4.5.2 a∪b 82
4.5.3 a-b 83
4.5.4 a-b∪b-a 83
4.6 集合间关系 84
4.6.1 相等判断 84
4.6.2 子集的判断 85
4.6.3 父集合的判断 85
4.6.4 其他判断 86
4.7 字典 86
4.7.1 字典字面量 86
4.7.2 字典的声明 87
4.7.3 字典的初始化 87
4.8 字典的操作 88
4.8.1 获取字典中的元素个数 88
4.8.2 读取键的值 88
4.8.3 添加元素 89
4.8.4 修改键关联的值 89
4.8.5 删除值 90
4.9 综合案例 91
4.9.1 求3科成绩的平均值 91
4.9.2 获取奇数月 92
4.10 上机实践 94
第5章 程序控制结构 95
5.1 顺序结构 95
5.2 选择结构——if语句 95
5.2.1 if语句 96
5.2.2 if...else语句 96
5.2.3 if...else if语句 97
5.2.4 if语句的嵌套 98
5.3 选择结构——switch语句 99
5.3.1 switch语句基本形式 99
5.3.2 switch语句的使用规则 100
5.4 循环结构——for语句 103
5.4.1 for...in循环 103
5.4.2 for-condition-increment条件循环 108
5.5 循环结构——while语句 108
5.5.1 while循环 109
5.5.2 repeat while循环 110
5.6 跳转语句 110
5.6.1 continue语句 110
5.6.2 break语句 111
5.6.3 fallthrough 112
5.7 标签语句 112
5.7.1 标签语句的定义 113
5.7.2 标签语句的使用 113
5.8 综合案例 114
5.8.1 打印九九乘法表 114
5.8.2 使用if else比较3个数值大小 115
5.8.3 计算1~100的奇数和 116
5.9 上机实践 116
第6章 函数和闭包 117
6.1 函数介绍 117
6.1.1 函数的功能 117
6.1.2 函数的形式 118
6.2 使用无参函数 118
6.2.1 无参函数的声明定义 119
6.2.2 无参函数的调用 119
6.2.3 空函数 119
6.3 使用有参函数 120
6.3.1 有参函数的声明定义 120
6.3.2 有参函数的调用 120
6.3.3 参数的注意事项 121
6.4 函数参数的特殊情况 121
6.4.1 函数参数名 122
6.4.2 指定外部参数名 122
6.4.3 忽略外部参数名 122
6.4.4 为参数设置默认值 123
6.4.5 可变参数 123
6.4.6 常量参数和变量参数 124
6.4.7 输入-输出参数 124
6.5 函数的返回值 125
6.5.1 具有一个返回值的函数 125
6.5.2 具有多个返回值的函数 126
6.5.3 可选元组返回类型 127
6.5.4 无返回值 128
6.6 函数类型 128
6.6.1 使用函数类型 129
6.6.2 使用函数类型作为参数类型 129
6.6.3 使用函数类型作为返回值类型 130
6.7 标准函数 131
6.7.1 绝对值函数abs() 131
6.7.2 最大值函数max()/最小值函数
min() 132
6.7.3 序列排序函数sortInPlace() 132
6.7.4 序列倒序函数reverse() 133
6.8 函数的嵌套 133
6.8.1 嵌套调用 134
6.8.2 递归调用 135
6.9 闭包 135
6.9.1 闭包表达式 136
6.9.2 Trailing闭包 138
6.9.3 捕获值 139
6.10 综合案例 140
6.10.1 打印金字塔 140
6.10.2 猴子吃桃 141
6.11 上机实践 142
第7章 类 143
7.1 类与对象 143
7.1.1 类的组成 143
7.1.2 创建类 143
7.1.3 实例化对象 144
7.2 属性 144
7.2.1 存储属性 144
7.2.2 计算属性 146
7.2.3 类型属性 148
7.2.4 属性监视器 150
7.3 方法 152
7.3.1 实例方法 152
7.3.2 类型方法 153
7.3.3 存储属性、局部变量和全局变量
的区别 155
7.3.4 局部变量和存储属性同名的解决
方法——self属性 156
7.4 下标脚本 157
7.4.1 定义下标脚本 157
7.4.2 调用下标脚本 157
7.4.3 使用下标脚本 158
7.5 类的嵌套 160
7.5.1 直接嵌套 160
7.5.2 多次嵌套 161
7.6 可选链接 162
7.6.1 使用可选链接调用代替强制解析 163
7.6.2 通过可选链接调用属性、下标
脚本、方法 163
7.6.3 连接多个链接 165
7.7 综合案例 166
7.7.1 收支情况 166
7.7.2 根据周长计算面积 167
7.8 上机实践 168
第8章 继承 170
8.1 为什么要使用继承 170
8.1.1 重用代码、简化代码 170
8.1.2 扩展功能 170
8.2 继承的实现 170
8.2.1 继承的定义 170
8.2.2 属性的继承 172
8.2.3 下标脚本的继承 173
8.2.4 方法的继承 174
8.3 继承的特点 174
8.3.1 多层继承 174
8.3.2 不可删除 175
8.4 重写 176
8.4.1 重写属性 176
8.4.2 重写下标脚本 178
8.4.3 重写方法 179
8.4.4 访问父类成员 180
8.4.5 阻止重写 182
8.5 类型转换 184
8.5.1 类型检查 184
8.5.2 向下转型 185
8.5.3 AnyObject和Any的类型转换 185
8.6 综合案例 187
8.7 上机实践 188
第9章 枚举和结构 189
9.1 枚举的构成 189
9.2 定义枚举 189
9.2.1 任意类型的枚举类型 189
9.2.2 指定数据类型的枚举类型 190
9.3 定义枚举的成员 190
9.3.1 定义任意类型的枚举成员 190
9.3.2 定义指定数据类型的枚举成员 191
9.3.3 定义枚举成员时的注意事项 192
9.4 实例化枚举的对象 192
9.5 枚举成员与switch匹配 192
9.6 访问枚举类型中成员的原始值 193
9.6.1 通过成员访问原始值 193
9.6.2 通过原始值访问成员 194
9.7 关联值 195
9.8 定义枚举的其他内容 195
9.8.1 定义属性 195
9.8.2 定义方法 197
9.8.3 定义下标脚本 198
9.9 递归枚举 199
9.10 结构的构成 200
9.11 结构的创建与实例化 200
9.11.1 结构的创建 200
9.11.2 结构体的实例化 200
9.12 定义结构中的内容 201
9.12.1 定义属性 201
9.12.2 定义方法 204
9.12.3 定义下标脚本 205
9.13 类、枚举、结构的区别 206
9.14 嵌套类型 206
9.15 综合案例 208
9.15.1 输出对应音符发音 208
9.15.2 根据棱长计算正方体的表面积和
体积 208
9.16 上机实践 209
第10章 构造器和析构器 210
10.1 值类型的构造器 210
10.1.1 默认构造器 210
10.1.2 自定义构造器 211
10.1.3 构造器代理 214
10.2 类的构造器 216
10.2.1 默认构造器 217
10.2.2 自定义构造器 217
10.2.3 构造器代理 220
10.2.4 类的两段式构造过程 221
10.2.5 构造器的继承和重载 222
10.2.6 必要构造器 225
10.3 可失败构造器 226
10.3.1 定义可失败构造器 226
10.3.2 枚举类型的可失败构造器 227
10.3.3 类的可失败构造器 228
10.3.4 构造失败的传递 229
10.3.5 重写一个可失败构造器 230
10.3.6 可失败构造器init! 231
10.4 构造器的特殊情况 232
10.4.1 可选属性类型 232
10.4.2 修改常量属性 232
10.5 设置默认值 233
10.5.1 在定义时直接赋值 233
10.5.2 在构造器中赋值 233
10.5.3 使用闭包设置属性的默认值 234
10.5.4 使用函数设置默认值 235
10.6 析构器 235
10.6.1 理解析构器 235
10.6.2 析构器的定义 236
10.6.3 使用析构器 236
10.6.4 使用析构器的注意事项 237
10.6.5 构造器和析构器的区别 239
10.7 综合案例 239
10.7.1 游戏属性 239
10.7.2 模拟下线通知 240
10.8 上机实践 240
第11章 扩展和协议 241
11.1 扩展 241
11.1.1 扩展的定义 241
11.1.2 扩展属性 241
11.1.3 扩展构造器 243
11.1.4 扩展方法 244
11.1.5 扩展下标脚本 246
11.1.6 扩展嵌套类型 247
11.2 协议 248
11.2.1 协议的定义 248
11.2.2 协议的实现 248
11.2.3 协议的成员声明——属性 249
11.2.4 协议的成员声明——方法 251
11.2.5 协议的成员声明——可变方法 252
11.2.6 协议的成员声明——构造器 253
11.3 可选协议 254
11.3.1 定义可选协议 254
11.3.2 声明可选成员 254
11.3.3 调用可选协议 255
11.4 使用协议 256
11.4.1 协议作为常量、变量等的数据
类型 256
11.4.2 协议作为返回值或参数类型 257
11.4.3 协议作为集合的元素类型 258
11.5 在扩展中使用协议 259
11.5.1 在扩展中实现协议 259
11.5.2 定义协议成员 259
11.5.3 扩展协议声明 260
11.6 协议的继承 260
11.7 协议合成 262
11.8 检查协议的一致性 263
11.9 委托 264
11.10 综合案例 267
11.11 上机实践 268
第12章 Swift语言的其他主题 269
12.1 自动引用计数 269
12.1.1 自动引用计数的工作机制 269
12.1.2 循环强引用的产生 270
12.1.3 循环强引用的解决方法 273
12.2 运算符重载 278
12.2.1 为什么使用运算符重载 278
12.2.2 算术运算符的重载 278
12.2.3 一元负号/正号运算符的重载 279
12.2.4 复合赋值运算符的重载 280
12.2.5 自增自减运算符的重载 281
12.2.6 比较运算符的重载 285
12.2.7 自定义运算符的重载 286
12.3 泛型 289
12.3.1 泛型函数 289
12.3.2 泛型类型 290
12.3.3 泛型类的层次结构 292
12.3.4 扩展一个泛型类型 294
12.3.5 具有多个类型参数的泛型 295
12.3.6 类型约束 295
12.3.7 关联类型 296
12.4 错误处理 300
12.4.1 抛出错误 300
12.4.2 捕获错误和处理错误 301
12.4.3 清理动作 302
12.5 综合案例 302
12.6 上机实践 303
第13章 使用Swift开发iOS
应用 304
13.1 创建项目 304
13.2 运行程序 306
13.3 模拟器的操作 307
13.3.1 模拟器与真机的区别 307
13.3.2 退出应用程序 307
13.3.3 应用程序图标的设置 307
13.3.4 语言设置 309
13.3.5 旋转 312
13.3.6 删除应用程序 312
13.4 编辑界面 313
13.4.1 界面介绍 313
13.4.2 设计界面 314
13.4.3 视图对象库的介绍 316
13.4.4 编写代码 317
13.5 上机实践 320
第14章 测试和发布App 321
14.1 测试App概述 321
14.1.1 测试驱动的软件开发流程 321
14.1.2 iOS单元测试框架 322
14.2 使用XCTest测试框架测试驱动的
软件开发案例 322
14.2.1 测试案例前期准备 322
14.2.2 添加XCTest到项目中 326
14.2.3 测试驱动的开发流程 328
14.3 发布前的准备工作 332
14.3.1 申请付费的开发者账号 332
14.3.2 申请App ID 335
14.3.3 申请证书 336
14.3.4 添加图标 343
14.3.5 调整Application Target属性 344
14.3.6 为发布进行编译 345
14.3.7 应用打包 347
14.4 进行发布 349
14.4.1 创建应用及基本信息 349
14.4.2 应用定价信息 352
14.4.3 上传应用 353
14.5 常见审核不通过的原因 357
14.6 上机实践 358
第15章 综合案例:打砖块游戏 359
15.1 功能介绍 359
15.2 界面设计 360
15.2.1 准备工作 360
15.2.2 主界面设计 361
15.2.3 游戏界面设计 362
15.2.4 游戏介绍界面设计 363
15.3 功能实现 364
15.3.1 界面之间的切换 364
15.3.2 打砖块游戏功能 368
15.4 真机测试 374
猜您喜欢