编辑推荐
-畅销书《iOS开发指南》作者力作 -基于Swift2.x,教你如何从零开始开发并上架应用 -涵盖CocoaTouch框架、混合编程(Objective-C、C/C++与Swift)、并发编程、SpriteKit等内容简介
《从零开始学Swift》基于Swift2.x,通过大量案例全面介绍苹果平台的应用开发。《从零开始学Swift》共分5部分,包括Swift语法篇、CocoaTouch框架编程篇、混合编程篇、进阶篇、项目实战篇,囊括了开发工具介绍、语言基础知识、编写HelloWorld程序,直至应用在AppStore上线的所有内容。此外,《从零开始学Swift》前20章专门配有同步练习,以帮助读者掌握所学知识。作者简介
关东升,iOS和Cocos技术作家、iOS技术顾问、Cocos有价值专家(CVP)、智捷课堂首席培训专家、51CTO社区iOS技术顾问。
他精通iOS、Android和Windows及HTML5等移动开发技术,擅长应用和游戏类项目开发,曾先后主持开发:大型网络游戏《神农诀》的iOS和Android客户端;国家农产品追溯系统的iPad客户端;酒店预订系统的iOS客户端;金融系统的iOS、Windows及Android客户端。与此同时,他长期为中国移动研究院、方正科技、大唐电信、中国石油、工商银行、南方航空、惠普、东软集团、NTT等企事业单位提供技术咨询及员工培训。
另著有:
《iOS开发指南》
《Swift开发指南》
《iOS传感器应用开发实践》
《iOS网络编程与云端应用实践》
《iOS图形图像、动画和多媒体编程技术实践》
《品味移动设计》
《交互设计的艺术》
《iPhone与iPad开发实战》
《Android开发案例驱动教程》
《Android网络游戏开发实战》
《Cocos2d-x实战:C++卷》
《Cocos2d-x实战:JS卷》
《Cocos2d-x实战:Lua卷》
《Cocos2d-x实战:工具卷》
目录
第一部分Swift语法篇
第1章准备起航2
1.1《从零开始学Swift》约定2
1.1.1示例代码约定2
1.1.2图示约定3
1.1.3函数和方法签名约定4
1.1.4承接上一行代码约定5
1.1.5代码行号约定5
1.2Swift开发工具6
1.2.1Xcode开发工具6
1.2.2AppCode开发工具12
1.3本章小结13
1.4同步练习13
第2章第一个Swift程序14
2.1使用REPL14
2.1.1启动SwiftREPL14
2.1.2使用SwiftREPL15
2.2使用Playground16
2.2.1编程利器Playground16
2.2.2编写HelloWorld程序18
2.3使用Web网站21
2.4通过Xcode创建OSX工程22
2.4.1创建OSX工程22
2.4.2编译和运行23
2.5通过AppCode创建OSX工程24
2.5.1创建OSX工程24
2.5.2编译和运行25
2.6使用swiftc命令27
2.6.1编译27
2.6.2运行28
2.7代码解释28
2.8在Linux下编译和运行Swift程序29
2.9本章小结32
2.10同步练习32
第3章Swift语法基础33
3.1标识符和关键字33
3.1.1标识符33
3.1.2关键字34
3.2常量和变量35
3.2.1常量35
3.2.2变量36
3.2.3使用var还是let36
3.3注释37
3.4表达式38
3.5本章小结39
3.6同步练习39
第4章运算符41
4.1算术运算符41
4.1.1一元运算符41
4.1.2二元运算符41
4.1.3算术赋值运算符43
4.2关系运算符43
4.3逻辑运算符45
4.4位运算符46
4.5其他运算符47
4.6本章小结48
4.7同步练习48
第5章Swift原生数据类型50
5.1Swift数据类型50
5.2整型50
5.3浮点型51
5.4数字表示方式52
5.4.1进制数字表示52
5.4.2指数表示52
5.4.3其他表示53
5.5数字类型之间的转换53
5.5.1整型之间的转换53
5.5.2整型与浮点型之间的转换54
5.6布尔型54
5.7元组类型54
5.8可选类型56
5.8.1可选类型概念56
5.8.2可选类型值拆包56
5.8.3可选绑定57
5.9本章小结57
5.10同步练习57
第6章Swift原生字符串59
6.1字符59
6.1.1Unicode编码59
6.1.2转义符60
6.2创建字符串61
6.3可变字符串61
6.3.1字符串拼接61
6.3.2字符串插入、删除和替换62
6.4字符串比较63
6.4.1大小和相等比较63
6.4.2前缀和后缀比较64
6.5本章小结65
6.6同步练习65
第7章控制语句66
7.1分支语句66
7.1.1if语句66
7.1.2switch语句68
7.1.3guard语句69
7.2循环语句71
7.2.1while语句71
7.2.2repeat-while语句73
7.2.3for语句74
7.2.4for-in语句75
7.3跳转语句76
7.3.1break语句76
7.3.2continue语句78
7.3.3fallthrough语句79
7.4范围与区间运算符81
7.4.1switch中使用区间运算符81
7.4.2for-in中使用区间运算符82
7.5值绑定83
7.5.1if中的值绑定83
7.5.2guard中的值绑定84
7.5.3switch中的值绑定85
7.6where语句85
7.6.1switch中使用where语句86
7.6.2for-in中使用where语句86
7.6.3guard中使用where语句86
7.7本章小结87
7.8同步练习87
第8章Swift原生集合类型91
8.1Swift中的数组集合91
8.1.1数组声明和初始化92
8.1.2可变数组93
8.1.3数组遍历94
8.2Swift中的字典集合94
8.2.1字典声明与初始化95
8.2.2可变字典96
8.2.3字典遍历97
8.3Swift中的Set集合98
8.3.1Set声明和初始化98
8.3.2可变Set集合99
8.3.3Set集合遍历100
8.3.4Set集合运算101
8.4本章小结102
8.5同步练习102
第9章函数104
9.1使用函数104
9.2传递参数105
9.2.1使用外部参数名105
9.2.2省略外部参数名105
9.2.3参数默认值106
9.2.4可变参数106
9.2.5参数的传递引用107
9.3函数返回值107
9.3.1无返回值函数107
9.3.2多返回值函数108
9.4函数类型108
9.4.1作为函数返回类型使用109
9.4.2作为参数类型使用110
9.5嵌套函数111
9.6本章小结112
9.7同步练习112
第10章闭包115
10.1回顾嵌套函数115
10.2闭包的概念115
10.3使用闭包表达式116
10.3.1类型推断简化117
10.3.2隐藏return关键字117
10.3.3省略参数名118
10.3.4使用闭包返回值118
10.4使用尾随闭包119
10.5捕获上下文中的变量和常量120
10.6本章小结121
10.7同步练习121
第11章Swift语言中的面向对象特性123
11.1面向对象概念和基本特征123
11.2Swift中的面向对象类型123
11.3枚举124
11.3.1成员值124
11.3.2原始值126
11.3.3相关值127
11.4结构体与类128
11.4.1类和结构体定义128
11.4.2再谈值类型和引用类型129
11.4.3引用类型的比较131
11.4.4运算符重载132
11.5类型嵌套133
11.6可选链134
11.6.1可选链的概念134
11.6.2使用问号(?)和感叹号(!)136
11.7访问限定136
11.7.1访问范围137
11.7.2访问级别138
11.7.3使用访问级别最佳实践138
11.8选择类还是结构体最佳实践140
11.8.1类和结构体的异同141
11.8.2选择的原则141
11.9本章小结142
11.10同步练习142
第12章属性与下标146
12.1存储属性146
12.1.1存储属性概念146
12.1.2延迟存储属性147
12.2计算属性148
12.2.1计算属性的概念148
12.2.2只读计算属性150
12.2.3结构体和枚举中的计算属性150
12.3属性观察者151
12.4静态属性153
12.4.1结构体静态属性154
12.4.2枚举静态属性155
12.4.3类静态属性156
12.5使用下标156
12.5.1下标概念157
12.5.2示例:二维数组157
12.6本章小结159
12.7同步练习159
第13章方法160
13.1实例方法160
13.1.1使用规范的命名160
13.1.2结构体和枚举方法变异163
13.2静态方法165
13.2.1结构体静态方法165
13.2.2枚举静态方法166
13.2.3类静态方法166
13.3本章小结167
13.4同步练习167
第14章构造与析构168
14.1构造函数168
14.1.1默认构造函数168
14.1.2构造函数与存储属性初始化169
14.1.3使用外部参数名170
14.2构造函数重载172
14.2.1构造函数重载概念172
14.2.2构造函数代理172
14.2.3类构造函数横向代理173
14.3析构函数174
14.4本章小结176
14.5同步练习176
第15章类继承178
15.1从一个示例开始178
15.2构造函数继承179
15.2.1构造函数调用规则179
15.2.2构造过程安全检查180
15.2.3构造函数继承184
15.3重写186
15.3.1重写实例属性186
15.3.2重写静态属性188
15.3.3重写实例方法189
15.3.4重写静态方法190
15.3.5下标重写190
15.3.6使用final关键字191
15.4类型检查与转换193
15.4.1使用is进行类型检查194
15.4.2使用as、as!和as?进行类型转换195
15.4.3使用Any和AnyObject类型197
15.5本章小结198
15.6同步练习198
第16章扩展200
16.1“轻量级”继承机制200
16.2声明扩展200
16.3扩展计算属性201
16.4扩展方法202
16.5扩展构造函数203
16.5.1值类型扩展构造函数203
16.5.2引用类型扩展构造函数204
16.6扩展下标204
16.7本章小结205
16.8同步练习205
第17章协议206
17.1协议概念206
17.2协议206
17.3协议方法207
17.3.1协议实例方法207
17.3.2协议静态方法208
17.3.3协议变异方法208
17.4协议属性210
17.4.1协议实例属性210
17.4.2协议静态属性211
17.5面向协议编程211
17.5.1协议类型212
17.5.2协议的继承214
17.5.3协议扩展215
17.5.4协议的合成216
17.5.5扩展中遵从协议217
17.5.6面向协议编程示例:表视图中使用
扩展协议217
17.6本章小结220
17.7同步练习220
第18章泛型222
18.1一个问题的思考222
18.2泛型函数222
18.2.1使用泛型函数223
18.2.2多类型参数223
18.3泛型类型223
18.4泛型扩展225
18.5本章小结226
18.6同步练习226
第19章Swift内存管理227
19.1Swift内存管理概述227
19.1.1引用计数227
19.1.2示例:Swift自动引用计数228
19.2强引用循环229
19.3打破强引用循环233
19.3.1弱引用233
19.3.2无主引用236
19.4闭包中的强引用循环238
19.4.1一个闭包中的强引用循环示例238
19.4.2解决闭包强引用循环239
19.5本章小结241
19.6同步练习241
第20章错误处理243
20.1Cocoa错误处理模式243
20.2do-try-catch错误处理模式244
20.2.1捕获错误244
20.2.2错误类型244
20.2.3声明抛出错误245
20.2.4在函数或方法中抛出错误245
20.2.5try?和try!的使用区别246
20.3示例:MyNotes应用数据持久层实现247
20.3.1MyNotes应用介绍247
20.3.2MyNotes应用数据持久层设计248
20.3.3实现Note实体类248
20.3.4NoteDAO代码实现249
20.3.5使用defer语句释放资源250
20.3.6测试示例251
20.4本章小结252
20.5同步练习252
第21章Swift编码规范253
21.1命名规范253
21.2注释规范255
21.2.1文件注释255
21.2.2文档注释255
21.2.3代码注释256
21.2.4使用地标注释257
21.3声明259
21.3.1变量或常量声明259
21.3.2属性声明260
21.4代码排版260
21.4.1空行260
21.4.2空格261
21.4.3断行262
21.4.4缩进263
21.5本章小结265
第二部分CocoaTouch框架编程篇
第22章Foundation框架268
22.1数字类NSNumber268
22.1.1获得NSNumber对象268
22.1.2比较NSNumber对象270
22.1.3数字格式化271
22.1.4NSNumber与Swift原生数字类型之间的桥接272
22.2字符串类273
22.2.1NSString类273
22.2.2NSMutableString类275
22.2.3NSString与String之间的桥接277
22.3数组类278
22.3.1NSArray类278
22.3.2NSMutableArray类279
22.3.3NSArray与Swift原生数组之间的桥接280
22.4字典类281
22.4.1NSDictionary类281
22.4.2NSMutableDictionary类282
22.4.3NSDictionary与Swift原生字典之间的桥接283
22.5NSSet集合类283
22.5.1NSSet类284
22.5.2NSMutableSet类284
22.5.3NSSet与Swift原生Set之间的桥接285
22.6文件管理286
22.6.1访问目录286
22.6.2目录操作287
22.6.3文件操作288
22.7字节缓存289
22.7.1NSData和NSMutableData类289
22.7.2示例:Base64解码与编码291
22.8日期与时间292
22.8.1使用NSDate类292
22.8.2日期时间格式化294
22.8.3使用NSCalendar和NSDateComponents类295
22.8.4示例:时区转换296
22.9使用谓词NSPredicate过滤数据297
22.9.1一个过滤员工花名册的示例298
22.9.2使用谓词NSPredicate300
22.9.3NSPrdicate与集合300
22.9.4格式说明符301
22.9.5运算符302
22.10使用正则表达式304
22.10.1在NSPredicate中使用正则表达式305
22.10.2使用NSRegularExpression305
22.10.3示例:日期格式转换307
22.11本章小结309
第23章iOS开发基础310
23.1iOS介绍310
23.2第一个iOS应用:HelloWorld310
23.2.1创建工程311
23.2.2Xcode中的iOS工程模板316
23.2.3程序剖析317
23.3iOSAPI简介319
23.4本章小结319
第24章CoreFoundation框架320
24.1数据类型映射320
24.2内存管理321
24.2.1Objective-C的MRC内存管理321
24.2.2对象所有权322
24.2.3内存托管对象323
24.2.4内存非托管对象324
24.3本章小结324
第25章CocoaTouch设计模式及应用325
25.1单例模式325
25.1.1问题提出325
25.1.2解决方案325
25.2目标与动作326
25.2.1问题提出326
25.2.2解决方案327
25.3输出口331
25.3.1问题提出331
25.3.2解决方案331
25.4选择器334
25.4.1问题提出334
25.4.2解决方案334
25.4.3示例:使用定时器变换视图背景335
25.5委托与数据源337
25.5.1问题提出337
25.5.2委托解决方案339
25.5.3数据源解决方案343
25.6通知机制346
25.6.1问题提出346
25.6.2解决方案346
25.6.3示例:关闭和打开键盘347
25.7MVC模式348
25.7.1MVC模式概述348
25.7.2CocoaTouch中的MVC模式349
25.8响应者链与触摸事件351
25.8.1响应者对象与响应链351
25.8.2触摸事件352
25.9本章小结357
第26章UIKit框架358
26.1视图控制器358
26.1.1与导航相关的视图控制器358
26.1.2视图控制器的生命周期358
26.2视图与UIView360
26.2.1UIView继承层次结构360
26.2.2视图分类362
26.2.3应用界面的构建层次362
26.3界面构建技术363
26.3.1使用故事板363
26.3.2使用XIB文件365
26.3.3使用代码368
26.4开关控件370
26.5滑块控件371
26.6分段控件373
26.7工具栏374
26.8导航栏376
26.9表视图379
26.9.1表视图组成379
26.9.2单元格组成和样式380
26.9.3示例:纯代码创建简单表视图381
26.10本章小结386
第三部分混合编程篇
第27章Swift与Objective-C混合编程388
27.1选择语言388
27.2文件扩展名388
27.3Swift与Objective-CAPI映射388
27.3.1构造函数映射389
27.3.2方法名映射391
27.4同一应用目标中的混合编程393
27.4.1什么是目标394
27.4.2Swift调用Objective-C396
27.4.3Objective-C调用Swift399
27.5同一框架目标中的混合编程402
27.5.1链接库和框架402
27.5.2Swift调用Objective-C404
27.5.3测试框架目标407
27.5.4Objective-C调用Swift410
27.6本章小结413
第28章Swift与C/C++混合编程414
28.1数据类型映射414
28.1.1C语言基本数据类型414
28.1.2C语言指针类型415
28.2应用目标中的混合编程419
28.2.1Swift调用CAPI419
28.2.2Swift调用C++API421
28.3框架目标中的混合编程425
28.3.1同一框架目标中Swift调用C或C++API425
28.3.2Swift调用第三方库中的C或C++API428
28.4示例:用SQLite嵌入式数据库实现MyNotes数据持久层430
28.4.1Note实体类代码430
28.4.2创建表431
28.4.3插入数据432
28.4.4查询数据434
28.4.5应用沙箱目录435
28.4.6表示层开发436
28.5本章小结440
第四部分进阶篇
第29章程序调试442
29.1Xcode调试工具442
29.1.1调试功能442
29.1.2输出窗口443
29.1.3变量查看窗口444
29.2设置和查看断点445
29.2.1断点设置445
29.2.2管理断点446
29.3使用Xcode中的Instruments工具447
29.3.1跟踪内存使用447
29.3.2内存泄漏查找449
29.4iOS真机调试453
29.4.1Xcode设置453
29.4.2设备设置455
29.5本章小结456
第30章并发编程457
30.1并发相关概念457
30.1.1CPU与并发执行457
30.1.2进程与线程457
30.2GCD技术457
30.2.1GCD概念458
30.2.2调度队列458
30.3GCD示例458
30.3.1主线程阻塞问题458
30.3.2使用GCD解决主线程阻塞460
30.4GCD与单例模式460
30.5本章小结461
第31章SpriteKit游戏引擎462
31.1移动平台游戏引擎介绍462
31.2第一个SpriteKit游戏462
31.2.1创建工程462
31.2.2工程剖析465
31.3一切都是节点468
31.3.1节点“家族”469
31.3.2节点树469
31.3.3节点中重要的方法470
31.3.4节点中重要的属性470
31.4精灵471
31.4.1精灵类SKSpriteNode471
31.4.2示例:沙漠英雄场景473
31.4.3使用纹理图集性能优化478
31.5场景切换481
31.5.1场景切换方法481
31.5.2场景过渡动画481
31.5.3示例:沙漠英雄场景切换481
31.6动作484
31.6.1常用动作484
31.6.2组合动作487
31.6.3示例:帧动画实现491
31.7粒子系统493
31.7.1粒子系统属性494
31.7.2内置粒子系统模板495
31.8游戏音乐与音效499
31.8.1音频文件介绍499
31.8.2iOS和OSX平台音频优化499
31.8.3背景音乐500
31.8.43D音效501
31.9物理引擎502
31.9.1物理引擎核心概念502
31.9.2物理引擎中的物体503
31.9.3接触与碰撞504
31.10本章小结507
第五部分项目实战篇
第32章项目实战:基于分层架构的多版本
iPhone计算器应用510
32.1应用分析与设计510
32.1.1应用概述510
32.1.2需求分析510
32.1.3原型设计511
32.2分层架构设计511
32.2.1低耦合应用架构511
32.2.2详细设计512
32.2.3分层架构设计有多种模式514
32.2.4选择语言514
32.3基于同一工程同一目标纯Swift的实现515
32.3.1创建工程515
32.3.2业务逻辑层开发516
32.3.3表示层开发520
32.4基于同一工程同一目标Swift调用Objective-C的实现531
32.4.1在Swift工程中添加Objective-C类531
32.4.2Objective-C实现业务逻辑层532
32.5基于同一工程不同目标Swift调用Objective-C的实现534
32.5.1添加业务逻辑层目标535
32.5.2暴露的头文件CalcLogic.h535
32.5.3修改表示层536
32.6基于同一工作空间不同工程下Swift调用Objective-C的实现536
32.6.1创建工作空间537
32.6.2暴露头文件CalcLogic.h537
32.6.3修改表示层537
32.7本章小结537
第33章游戏App实战:《迷失航线》538
33.1《迷失航线》游戏分析与设计538
33.1.1《迷失航线》故事背景538
33.1.2需求分析538
33.1.3原型设计539
33.1.4游戏脚本540
33.2任务1:游戏工程的创建与初始化540
33.2.1迭代1.1:创建工程540
33.2.2迭代1.2:自定义类型维护540
33.2.3迭代1.3:添加资源文件543
33.3任务2:创建Loading场景543
33.3.1迭代2.1:设计场景544
33.3.2迭代2.2:Loading动画545
33.3.3迭代2.3:预处理加载纹理545
33.4任务3:创建Home场景546
33.4.1迭代3.1:设计场景546
33.4.2迭代3.2:实现代码547
33.5任务4:创建设置场景549
33.5.1迭代4.1:设计场景550
33.5.2迭代4.2:实现代码550
33.6任务5:创建帮助场景552
33.6.1迭代5.1:设计场景553
33.6.2迭代5.2:实现代码553
33.7任务6:实现游戏场景554
33.7.1迭代6.1:设计场景555
33.7.2迭代6.2:创建敌人精灵556
33.7.3迭代6.3:创建玩家飞机精灵560
33.7.4迭代6.4:创建子弹精灵560
33.7.5迭代6.5:初始化游戏场景561
33.7.6迭代6.6:玩家移动飞机565
33.7.7迭代6.7:游戏循环与任务调度566
33.7.8迭代6.8:游戏场景菜单实现566
33.7.9迭代6.9:玩家飞机发射子弹568
33.7.10迭代6.10:子弹与敌人的碰撞检测569
33.7.11迭代6.11:玩家飞机与敌人的碰撞检测571
33.8任务7:游戏结束场景573
33.8.1迭代7.1:设计场景573
33.8.2迭代7.2:实现代码574
33.9本章小结575
第34章《迷失航线》游戏上架苹果AppStore576
34.1苹果AppStore576
34.2还有“最后一公里”577
34.2.1添加图标577
34.2.2添加启动界面579
34.2.3修改发布产品属性581
34.3为发布进行编译582
34.3.1创建开发者证书583
34.3.2创建AppID587
34.3.3创建描述文件589
34.3.4发布编译593
34.4发布上架594
34.4.1创建应用595
34.4.2应用定价597
34.4.3基本信息输入597
34.4.4上传应用601
34.4.5提交审核603
34.5审核不通过的常见原因604
34.5.1功能问题604
34.5.2用户界面问题604
34.5.3商业问题605
34.5.4不当内容605
34.5.5其他问题605
34.6本章小结605