书海网短评:
基于Swift2.1版本写成,针对Swift1.x和2.x变化比较大的特点进行了彻底升级。 不仅百分百覆盖Apple官方Swift编程指南,更有丰富案例便于读者学习和领悟。 书中代码的注释
基于Swift2.1版本写成,针对Swift1.x和2.x变化比较大的特点进行了彻底升级。
不仅百分百覆盖Apple官方Swift编程指南,更有丰富案例便于读者学习和领悟。
书中代码的注释非常详细,不仅注释的数量庞大,而且把一些简单知识点之间写到注释里,力求读者轻松上手。
在书中前言的*后位置列出了*书配套代码的下载地址,供读者免费试用。
Swift正逐步进入iOSAPP的实际应用开发,而Apple在WWDC2015上发布了Swift2.0版本,这也表明了Apple对Swift的支持决心,不难预测,Swift的市场份额肯定会超过传统的Objective-C。
《疯狂Swift讲义(第2版)》是《疯狂Swift讲义》的第2版,《疯狂Swift讲义(第2版)》以*新的OSX10.11为平台、以Xcode7.1为开发工具,*面介绍了Swift2.1的语法以及使用Swift开发iOS应用的知识。《疯狂Swift讲义(第2版)》*面覆盖了Swift的基本语法结构、Swift函数式编程特征、Swift的面向对象特征、Foundation框架的核心类库用法等知识,并通过示例介绍了如何在iOS应用中混合使用Swift与Objective-C进行开发。《疯狂Swift讲义(第2版)》重点介绍了repeatwhile循环、guard语句、API检查、条件编译、Set集合、错误处理机制、协议扩展等Swift2.x新增的内容,这样新增的内容使得Swift具有更强的生命力。
《疯狂Swift讲义(第2版)》并不局限于介绍Swift的简单语法,而是从“项目驱动”的角度来讲授理论。*书为Swift所有语法提供了大量的示例程序,大部分地方甚至从正、反两方面举例,务求使读者能举一反三地真正掌握Swift编程。如果读者在阅读《疯狂Swift讲义(第2版)》时遇到了技术问题,可以登录疯狂Java联盟(http://www.crazyit.org)发帖,笔者将会及时予以解答。
李刚,十余年软件开发从业经验,疯狂软件教育中心教学总监。疯狂Java实训营创始人,疯狂Java体系原创图书作者。广东技术师范学院计算机科学系兼职副教授,51CTO专家门诊特邀嘉宾。培训的学生已在华为、IBM、阿里软件、网易、电信盈科等名企就职。国内知名高端IT技术图书作家,已出版《疯狂Java讲义》《疯狂Android讲义》《轻量级JavaEE企业应用实战》《疯狂iOS讲义(基础篇)(提高篇)》《疯狂前端开发讲义》《疯狂HTML5/CSS3/JavaScript讲义》《疯狂XML讲义》《经典JavaEE企业应用实战》《Struts2。x专业指南》等著作。其中疯狂Java体系图书均已沉淀多年,赢得极高的市场认同,多次重印,多部著作印刷数量超过10万册,并被多所“985”“211”院校选作教材,部分图书已被翻译成繁体中文版,授权到中国台湾地区。
第1章 Swift语言与开发环境1
1.1 Swift语言简介2
1.1.1 Swift语言2
1.1.2 关于Swift的几个误解2
1.2 搭建Swift开发环境3
1.2.1 下载和安装Xcode4
1.2.2 安装辅助工具和文档6
1.3 第一个Swift程序7
1.3.1 Swift程序入口7
1.3.2 使用Playground工具8
1.3.3 开发Swift项目10
1.4 使用终端窗口编译、运行Swift程序12
1.4.1 使用swiftc编译Swift程序12
1.4.2 使用swift交互命令14
1.5 熟悉Xcode14
1.5.1 创建iOS项目14
1.5.2 熟悉导航面板15
1.5.3 熟悉检查器面板18
1.5.4 熟悉库面板20
1.5.5 使用Xcode的帮助系统22
1.6 本章小结24
第2章 Swift的基本数据类型25
2.1 注释26
2.2 变量与常量27
2.2.1 分隔符27
2.2.2 标识符规则29
2.2.3 Swift的关键字29
2.2.4 声明变量和常量30
2.2.5 输出变量和常量32
2.3 整型32
2.4 浮点型34
2.5 数值型之间的类型转换35
2.5.1 整型之间的转换35
2.5.2 浮点型与整型之间的转换37
2.6 Bool型38
2.7 元组(tuple)类型38
2.7.1 定义元组类型的变量39
2.7.2 获取元组中的元素值39
2.7.3 为元组中的元素命名40
2.8 可选类型40
2.8.1 可选和nil41
2.8.2 强制解析42
2.8.3 可选绑定43
2.8.4 隐式可选类型43
2.9 类型别名45
2.10 字符和字符串45
2.10.1 字符类型45
2.10.2 字符串类型46
2.10.3 字符串的可变性48
2.10.4 字符串的基本操作48
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.4 位运算符58
3.5 扩展后的赋值运算符61
3.6 范围运算符61
3.6.1 闭范围运算符61
3.6.2 半开范围运算符61
3.7 比较运算符62
3.8 逻辑运算符63
3.8.1 Swift的3个逻辑运算符63
3.8.2 组合逻辑与括号63
3.9 三目运算符64
3.10 nil合并运算符65
3.11 运算符的结合性和优先级66
3.12 本章小结67
第4章 流程控制68
4.1 顺序结构69
4.2 分支结构69
4.2.1 if条件语句69
4.2.2 switch分支语句72
4.2.3 switch不存在隐式贯穿(fallthrough)和显式贯穿73
4.2.4 使用break结束switch74
4.2.5 switch的范围匹配75
4.2.6 switch的元组匹配75
4.2.7 case的值绑定77
4.2.8 case的where子句78
4.3 循环结构79
4.3.1 while循环语句79
4.3.2 repeatwhile循环语句80
4.3.3 for循环81
4.3.4 for-in循环83
4.3.5 嵌套循环83
4.4 控制循环结构84
4.4.1 使用break结束循环84
4.4.2 使用continue忽略本次循环的剩下语句85
4.4.3 使用return结束方法86
4.5 Swift2新增的guard语句87
4.6 Swift2新增的API检查88
4.7 条件编译89
4.8 本章小结90
第5章 集合91
5.1 数组92
5.1.1 声明和创建数组92
5.1.2 使用数组93
5.1.3 使用for-in遍历数组95
5.1.4 数组的可变性和数组的修改95
5.1.5 多维数组98
5.1.6 数组的应用举例101
5.2 Set集合102
5.2.1 声明和创建Set102
5.2.2 使用Set103
5.2.3 使用for-in遍历Set104
5.2.4 Set的可变性和Set的修改104
5.2.5 Set集合元素与hashValue106
5.2.6 Set支持的集合运算106
5.2.7 Set集合的关系运算107
5.3 字典108
5.3.1 声明和创建字典109
5.3.2 使用字典110
5.3.3 使用for-in遍历字典111
5.3.4 单独使用字典的keys或values111
5.3.5 字典的可变性和字典的修改112
5.3.6 字典的应用举例113
5.4 集合的复制114
5.4.1 数组与Set的复制114
5.4.2 字典的复制116
5.5 本章小结117
第6章 函数和闭包118
6.1 函数入门119
6.1.1 定义和调用函数119
6.1.2 函数返回值120
6.1.3 递归函数122
6.2 函数的形参123
6.2.1 外部形参名123
6.2.2 形参默认值124
6.2.3 个数可变的形参125
6.2.4 常量形参和变量形参126
6.2.5 In-Out形参126
6.3 函数类型130
6.3.1 使用函数类型130
6.3.2 使用函数类型作为形参类型131
6.3.3 使用函数类型作为返回值类型133
6.4 函数重载133
6.5 嵌套函数135
6.6 嵌套函数与闭包137
6.6.1 回顾嵌套函数137
6.6.2 使用闭包表达式代替嵌套函数137
6.6.3 闭包的escape138
6.7 闭包表达式139
6.7.1 调用闭包(使用闭包返回值)139
6.7.2 利用上下文推断类型140
6.7.3 省略return141
6.7.4 省略形参名141
6.7.5 尾随闭包142
6.8 捕获上下文中的变量和常量143
6.9 闭包是引用类型144
6.10 自动闭包145
6.11 本章小结146
第7章 面向对象编程(上)147
7.1 Swift的面向对象支持148
7.1.1 面向对象概述148
7.1.2 Swift的面向对象类型148
7.2 枚举149
7.2.1 定义枚举149
7.2.2 枚举值和switch语句151
7.2.3 原始值152
7.2.4 关联值153
7.2.5 递归枚举155
7.3 类和结构体156
7.3.1 定义结构体和类156
7.3.2 创建实例160
7.3.3 值类型与引用类型161
7.3.4 引用类型的比较163
7.3.5 self关键字165
7.3.6 类和结构体的选择167
7.4 存储属性167
7.4.1 实例存储属性与实例变量167
7.4.2 结构体常量与实例属性169
7.4.3 延迟存储属性169
7.5 计算属性170
7.5.1 定义计算属性170
7.5.2 set部分的简化172
7.5.3 只读的计算属性173
7.6 属性观察者173
7.7 方法175
7.7.1 方法的所属性176
7.7.2 将方法转换为函数176
7.7.3 方法的外部形参名177
7.7.4 Swift方法的命名习惯179
7.7.5 值类型的可变方法180
7.7.6 属性和方法的统一182
7.8 下标183
7.8.1 下标的基本用法183
7.8.2 下标重载185
7.9 可选链187
7.9.1 使用可选链代替强制解析187
7.9.2 使用可选链调用方法189
7.9.3 使用可选链调用下标190
7.10 类型属性和类型方法190
7.10.1 类型成员的修饰符191
7.10.2 值类型的类型属性191
7.10.3 类的类型属性192
7.10.4 值类型的类型方法193
7.10.5 类的类型方法194
7.11 错误处理194
7.11.1 抛出错误195
7.11.2 声明抛出错误195
7.11.3 使用do-catch捕捉错误196
7.11.4 将错误转为可选值197
7.11.5 使错误失效198
7.11.6 使用defer回收资源199
7.12 构造器200
7.12.1 类和结构体的构造器200
7.12.2 构造器的外部形参名201
7.12.3 使用闭包或函数为属性设置初始值203
7.12.4 值类型的构造器重载204
7.13 可能失败的构造器205
7.13.1 结构体与可能失败的构造器206
7.13.2 枚举与可能失败的构造器207
7.14 本章小结208
第8章 面向对象编程(下)209
8.1 继承210
8.1.1 继承的特点210
8.1.2 重写父类的方法211
8.1.3 重写父类的属性212
8.1.4 重写属性观察者214
8.1.5 重写父类的下标214
8.1.6 使用final防止重写215
8.2 类的构造与析构217
8.2.1 类的指定构造器和便利构造器217
8.2.2 类的构造器链218
8.2.3 两段式构造220
8.2.4 构造器的继承和重写223
8.2.5 类与可能失败的构造器226
8.2.6 可能失败的构造器的传播227
8.2.7 重写可能失败的构造器228
8.2.8 子类必须包含的构造器230
8.2.9 析构器231
8.3 多态232
8.3.1 多态性232
8.3.2 使用is运算符检查类型233
8.3.3 使用as运算符向下转型234
8.3.4 Any和AnyObject236
8.4 嵌套类型237
8.5 扩展238
8.5.1 使用扩展添加属性239
8.5.2 使用扩展添加方法240
8.5.3 使用扩展添加可变方法241
8.5.4 使用扩展添加构造器241
8.5.5 使用扩展添加下标242
8.5.6 使用扩展添加嵌套类型242
8.6 协议243
8.6.1 规范、接口与协议语法243
8.6.2 协议指定的属性要求244
8.6.3 协议指定的方法要求248
8.6.4 协议指定的可变方法要求249
8.6.5 协议指定的下标要求251
8.6.6 协议指定的构造器要求252
8.6.7 使用协议作为类型254
8.6.8 合成协议255
8.6.9 通过扩展为已有的类型添加协议256
8.6.10 唯类(Class-Only)协议257
8.6.11 可选协议258
8.6.12 协议扩展260
8.6.13 输出实例和CustomStringConvertible协议262
8.6.14 使用自定义类型作为字典的key263
8.7 隐藏与封装266
8.7.1 理解封装266
8.7.2 访问控制符266
8.7.3 访问控制语法268
8.7.4 使用访问权限定义类型269
8.7.5 子类的访问权限270
8.7.6 常量、变量、属性、下标的访问权限271
8.7.7 构造器的访问权限272
8.7.8 协议的访问权限273
8.7.9 扩展的访问权限273
8.7.10 类型别名的访问权限273
8.8 Swift内存管理273
8.8.1 理解自动引用计数(ARC)274
8.8.2 强引用循环276
8.8.3 使用弱引用解决强引用循环278
8.8.4 使用无主引用解决强引用循环279
8.8.5 闭包与对象的强引用循环281
8.8.6 使用弱引用或无主引用解决闭包的强引用循环282
8.9 Swift面向对象语法总结283
8.10 本章小结284
第9章 泛型285
9.1 泛型的作用286
9.2 泛型函数287
9.2.1 定义泛型函数287
9.2.2 定义多个类型参数288
9.3 泛型类型290
9.3.1 定义泛型类型290
9.3.2 从泛型类派生子类291
9.3.3 扩展泛型类型292
9.4 类型约束292
9.5 关联类型295
9.5.1 使用关联类型295
9.5.2 扩展已有类型来确定关联类型297
9.6 where子句297
9.6.1 泛型声明的where子句297
9.6.2 协议扩展的where子句298
9.7 本章小结299
第10章 运算符函数300
10.1 运算符重载301
10.2 前置和后置运算符303
10.3 扩展后的赋值运算符305
10.4 比较运算符305
10.5 自定义运算符307
10.5.1 开发自定义运算符307
10.5.2 自定义运算符的结合性和优先级308
10.6 本章小结309
第11章 Foundation框架详解310
11.1 包装类311
11.1.1 它们不是包装类311
11.1.2 NSValue和NSNumber312
11.2 字符串(NSString与NSMutableString)313
11.2.1 NSString的常用功能313
11.2.2 可变字符串(NSMutableString)315
11.3 日期与时间316
11.3.1 日期与时间(NSDate)316
11.3.2 日期格式器(NSDateFormatter)317
11.3.3 日历(NSCalendar)与日期组件(NSDateComponents)319
11.4 数组(NSArray与NSMutableArray)320
11.4.1 NSArray的功能与用法320
11.4.2 对集合元素整体调用方法322
11.4.3 对NSArray进行排序324
11.4.4 使用枚举器遍历NSArray集合元素324
11.4.5 可变数组(NSMutableArray)325
11.5 集合(NSSet与NSMutableSet)327
11.5.1 NSSet的功能与用法327
11.5.2 NSMutableSet的功能与用法330
11.5.3 NSCountedSet的功能与用法331
11.6 有序集合(NSOrderedSet与NSMutableOrderedSet)332
11.7 字典(NSDictionary与NSMutableDictionary)333
11.7.1 NSDictionary的功能与用法334
11.7.2 对NSDictionary的key进行排序336
11.7.3 对NSDictionary的key进行过滤337
11.7.4 NSMutableDictionary的功能与用法338
11.8 本章小结339
第12章 使用Swift开发iOS应用340
12.1 从iOS项目开始341
12.1.1 iOS项目包含的文件341
12.1.2 InterfaceBuilder简介342
12.1.3 添加控件344
12.1.4 修改控件属性345
12.1.5 UIView支持的属性347
12.1.6 UILabel支持的属性349
12.2 MVC351
12.2.1 程序入口和应用程序代理351
12.2.2 理解iOS的MVC353
12.2.3 掌握UIViewController控制器354
12.3 事件机制356
12.3.1 程序获取控件的两种方式356
12.3.2 事件处理的3种方式362
12.4 代码控制UI界面367
12.4.1 不使用界面设计文件开发UI界面367
12.4.2 使用代码创建UI界面369
12.4.3 自定义UI控件371
12.5 本章小结374
第13章 Objective-C与Swift混编375
13.1 Swift调用Objective-C376
13.1.1 创建Swift项目376
13.1.2 添加Objective-C类376
13.1.3 调用Objective-C类379
13.2 Objective-C调用Swift380
13.2.1 为Objective-C项目添加Swift类381
13.2.2 调用Swift类382
13.3 本章小结384
第14章 俄罗斯方块385
14.1 俄罗斯方块简介386
14.2 开发游戏界面387
14.2.1 界面布局设计387
14.2.2 开发游戏界面控件390
14.3 俄罗斯方块的数据模型391
14.3.1 定义数据模型392
14.3.2 初始化游戏状态数据393
14.4 实现游戏逻辑395
14.4.1 处理方块掉落396
14.4.2 处理方块左移400
14.4.3 处理方块右移401
14.4.4 处理方块旋转402
14.4.5 启动游戏404
14.5 本章小结405
Swift正逐步占领iOSApp实际开发的市场份额,Swift的简洁、易用性已经吸引了大量开发者,大家已开始或准备开始使用Swift开发iOSApp。Apple在WWDC2015上再次发布了Swift2.0版本,既向开发者宣示了Apple对Swift的支持决心,也进一步增强了Swift的功能,使得Swift真正成为一门强大的开发语言。
Swift的最大特点是简洁,它从JavaScript、Go等现代语言中学习了不少内容,从而让Swift具有非常简洁的编程体验,十分接近程序员的习惯。而且Swift能很好地兼容Objective-C已有的框架和库,因此Swift与Objective-C完全可以进行混合编程。此外,Swift语言还有已经十分成熟的Cocoa、CocoaTouch框架的支持,更加可靠!
需要说明的是,Swift虽然提供了简洁的语法,但Swift的功能并不简单,绝对是一门具有工业品质的强大语言。Swift既支持函数式的编程方式,也支持面向对象的编程方式。Swift的函数式编程方式完全支持主流的函数和闭包,传参方式既支持值传递方式,也支持引用传递方式,还支持多返回值的函数,语法功能非常丰富;在面向对象的支持方面,Swift完全支持面向对象的封装、继承、多态等基本功能,而且Swift提供了枚举、结构体和类三种面向对象的类型,这三种类型都可创建实例、调用方法,而且都允许定义属性、方法、构造器、下标和嵌套类型,语法功能非常丰富。如果真正全面掌握了Swift的所有功能,就会发现Swift虽然是一门简洁的编程语言,但它也是一门功能非常强大的语言。
《疯狂Swift讲义(第2版)》是《疯狂Swift讲义》的第2版,真正基于OSX10.11平台,采用Xcode7.1作为开发工具。Swift2.x与Swift1.x相比变化非常大:简单的改变如抛弃了原有的println输出函数,改为使用print输出函数,String不再遵守CollectionType协议等;重大的更新包括repeatwhile循环、guard语句、API检查、条件编译、Set集合、错误处理机制、协议扩展等内容。这些内容都是《疯狂Swift讲义(第2版)》重点介绍的知识。
最后《疯狂Swift讲义(第2版)》提醒读者,Swift虽然是一门简洁、优雅的编程语言,但它绝非一门简单的toy语言。因此希望广大开发者在开始学习Swift之前做好心理准备:Swift是一门功能强大的工业语言,因此它的语法功能非常丰富。《疯狂Swift讲义(第2版)》作为“疯狂体系”Swift学习图书,当然不是仅提供浅尝辄止的入门语法,而是真正全面、细致地介绍了Swift语言的各种功能,100%完整覆盖了Apple官方的“TheSwiftProgrammingLanguage”编程指南,而且大部分语法功能都从正反两面举例,务求让读者能举一反三地真正掌握Swift编程。
《疯狂Swift讲义(第2版)》有什么特点
正如前面所介绍的,《疯狂Swift讲义(第2版)》并不是一本简单的Swift入门教材,而是一本全面而完整的Swift编程手册,不仅100%完整覆盖了Apple官方的“TheSwiftProgrammingLanguage”编程指南,而且示例更加丰富,行文更加通俗易懂,更符合中国人的学习习惯。这一点,一直都是“疯狂体系”图书的风格。
《疯狂Swift讲义(第2版)》内容大致可分为4部分:
第1部分:由第1章组成,这部分简要介绍了Swift语言的相关背景,主要介绍了如何搭建Swift的开发环境,包括Playground的功能和用法,重点介绍了如何在终端窗口编译、运行Swift程序。
第2部分:由第2~6章组成,主要介绍了Swift的基础语法和函数式编程支持,也介绍了Swift的String、Array、Set、Dictionary等内置类型。
第3部分:由第7~11章组成,主要介绍了Swift的面向对象编程支持,并介绍了使用Swift调用Foundation框架的常用类。
第4部分:由第12~14章组成,主要介绍了如何使用Swift开发iOS应用,详细介绍了iOS项目的结构,并归纳了iOS应用的MVC设计,在代码中获取UI控件的两种方式(必须先获取UI控件,然后即可修改它来更新用户界面),iOS应用事件处理的三种方式。通过这种方式可以让读者快速掌握iOS编程的思路。第14章还介绍了一个iOS游戏:俄罗斯方块。
《疯狂Swift讲义(第2版)》不是一本看完之后可以“吹嘘、炫耀”的书——因为《疯狂Swift讲义(第2版)》并没有堆砌一堆“深奥”的新名词、一堆“高深”的思想;《疯狂Swift讲义(第2版)》保持了“疯狂体系”的一贯风格:操作步骤详细、编程思路清晰、语言平实。只要读者想学习Swift编程,justdoit——Swift虽不像网络流传的那么简单,但只要认真阅读此书,并准备动手“敲代码”,完全可以真正掌握它。无须担心没有编程基础(《疯狂Swift讲义(第2版)》从最基础的定义变量开始讲起),也无须担心没有Apple电脑(网络上使用普通电脑装黑苹果的文章铺天盖地)——只要你有决心和毅力,就可以真正掌握Swift编程,进而掌握iOS应用开发。
不管怎样,只要读者在阅读《疯狂Swift讲义(第2版)》时遇到知识上的问题,都可以登录疯狂Java联盟(http://www.crazyit.org)与广大学习者交流,笔者也会通过该平台与大家一起交流、学习。
《疯狂Swift讲义(第2版)》还具有如下三个特点。
1.版本成熟,语法稳定
《疯狂Swift讲义(第2版)》并非基于Swift测试版写成,而是以OSX10.11为平台,基于Xcode7.1开发工具,采用稳定的Swift2.1正式版写成,因此读者阅读此书时极少会发现书中知识已经过时或被抛弃的情形。
2.知识全面,覆盖面广
《疯狂Swift讲义(第2版)》不像某些入门级的小册子看上去那么简单,《疯狂Swift讲义(第2版)》全面而细致地介绍了Swift编程的各种语法,不仅100%完整覆盖Apple官方的“TheSwiftProgrammingLanguage”编程指南,而且示例更加丰富。
3.注释详细,轻松上手
为了降低读者阅读的难度,书中代码的注释非常详细,几乎每两行代码就有一行注释。不仅如此,《疯狂Swift讲义(第2版)》甚至还把一些简单理论作为注释穿插到代码中,力求让读者能轻松上手。
《疯狂Swift讲义(第2版)》所有程序中的关键代码均以粗体字标出,也是为了帮助读者能迅速找到这些程序的关键点。
《疯狂Swift讲义(第2版)》写给谁看
《疯狂Swift讲义(第2版)》为所有打算深入掌握Swift编程的读者而编写,适合各个层次的Swift学习者和开发者阅读,也适合作为大学教育、培训机构的Swift教材。
李刚
2015年12月27日









