描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111556350丛书名: OReilly精品图书系列
内容简介
本书主要介绍XcodeIDE、CocoaTouch框架与Swift2.0。通过阅读本书,你将学习Swift面向对象的概念、理解如何使用Apple的开发工具,以及探索Cocoa是如何提供iOS应用所需的底层功能的。
目 录
目录
前言1
部分 语言
第1章 Swift架构纵览11
1.1 基础11
1.2 万物皆对象12
1.3 对象类型的3种风格14
1.4 变量14
1.5 函数15
1.6 Swift文件的结构16
1.7 作用域与生命周期19
1.8 对象成员20
1.9 命名空间20
1.10 模块21
1.11 实例22
1.12 为何使用实例24
1.13 self26
1.14 隐私27
1.15 设计29
1.15.1 对象类型与API29
1.15.2 实例创建、作用域与生命周期31
1.15.3 小结32
第2章 函数34
2.1 函数参数与返回值34
2.1.1 Void返回类型与参数37
2.1.2 函数签名38
2.2 外部参数名38
2.3 重载41
2.4 默认参数值42
2.5 可变参数43
2.6 可忽略参数44
2.7 可修改参数44
2.8 函数中的函数48
2.9 递归49
2.10 将函数作为值50
2.11 匿名函数53
2.12 定义与调用57
2.13 闭包58
2.13.1 闭包是如何改善代码的59
2.13.2 返回函数的函数61
2.13.3 使用闭包设置捕获变量64
2.13.4 使用闭包保存捕获的环境64
2.14 柯里化函数66
第3章 变量与简单类型68
3.1 变量作用域与生命周期68
3.2 变量声明69
3.3 计算初始化器72
3.4 计算变量73
3.5 setter观察者76
3.6 延迟初始化77
3.7 内建简单类型79
3.7.1 Bool80
3.7.2 数字81
3.7.3 String88
3.7.4 Character93
3.7.5 Range96
3.7.6 元组98
3.7.7 Optional102
第4章 对象类型114
4.1 对象类型声明与特性114
4.1.1 初始化器115
4.1.2 属性122
4.1.3 方法125
4.1.4 下标127
4.1.5 嵌套对象类型128
4.1.6 实例引用129
4.2 枚举131
4.2.1 带有固定值的Case132
4.2.2 带有类型值的Case133
4.2.3 枚举初始化器134
4.2.4 枚举属性136
4.2.5 枚举方法137
4.2.6 为何使用枚举138
4.3 结构体139
4.3.1 结构体初始化器、属性与方法139
4.3.2 将结构体作为命名空间140
4.4 类141
4.4.1 值类型与引用类型142
4.4.2 子类与父类146
4.4.3 类初始化器151
4.4.4 类析构器159
4.4.5 类属性与方法159
4.5 多态161
4.6 类型转换164
4.7 类型引用168
4.8 协议172
4.8.1 为何使用协议174
4.8.2 协议类型测试与转换176
4.8.3 声明协议177
4.8.4 可选协议成员178
4.8.5 类协议180
4.8.6 隐式初始化器180
4.8.7 字面值转换182
4.9 泛型183
4.9.1 泛型声明185
4.9.2 类型约束186
4.9.3 显式特化189
4.9.4 关联类型链190
4.9.5 附加约束192
4.10 扩展196
4.10.1 扩展对象类型196
4.10.2 扩展协议199
4.10.3 扩展泛型202
4.11 保护类型203
4.11.1 AnyObject203
4.11.2 AnyClass206
4.11.3 Any207
4.12 集合类型208
4.12.1 Array208
4.12.2 Dictionary222
4.12.3 Set227
第5章 流程控制与其他232
5.1 流程控制232
5.1.1 分支233
5.1.2 循环245
5.1.3 跳转250
5.2 运算符261
5.3 隐私性264
5.3.1 Private声明265
5.3.2 Public声明267
5.3.3 隐私性规则267
5.4 内省267
5.5 内存管理269
5.5.1 弱引用270
5.5.2 无主引用272
5.5.3 匿名函数中的弱引用与无主引用273
5.5.4 协议类型引用的内存管理275
第二部分 IDE
第6章 Xcode项目剖析279
6.1 新建项目279
6.2 项目窗口281
6.2.1 导航窗格282
6.2.2 辅助窗格288
6.2.3 编辑器289
6.3 项目文件及其依赖291
6.4 目标293
6.4.1 构建阶段294
6.4.2 构建设置296
6.4.3 配置297
6.4.4 方案与目标298
6.5 从项目到运行应用300
6.5.1 构建设置303
6.5.2 属性列表设置303
6.5.3 nib文件304
6.5.4 其他资源305
6.5.5 代码文件与应用启动过程307
6.5.6 框架与SDK312
6.6 对项目内容进行重命名314
第7章 nib管理316
7.1 nib编辑器界面概览317
7.1.1 文档大纲318
7.1.2 画布321
7.1.3 查看器与库323
7.2 nib加载324
7.2.1 何时加载nib325
7.2.2 手工加载nib326
7.3 连接328
7.3.1 插座变量328
7.3.2 nib拥有者330
7.3.3 自动配置nib333
7.3.4 误配置的插座变量333
7.3.5 删除插座变量335
7.3.6 创建插座变量的其他方式335
7.3.7 插座变量集合338
7.3.8 动作连接339
7.3.9 创建动作的其他方式340
7.3.10 误配置的动作342
7.3.11 nib之间的连接——不行!342
7.4 nib实例的其他配置343
第8章 文档346
8.1 文档窗口346
8.2 类文档页面349
8.3 示例代码351
8.4 快速帮助352
8.5 符号353
8.6 头文件354
8.7 互联网资源355
第9章 项目的生命周期356
9.1 设备架构与条件代码356
9.1.1 向后兼容357
9.1.2 设备类型359
9.2 版本控制360
9.3 编辑与代码导航362
9.3.1 自动补令363
9.3.2 代码片段364
9.3.3 Fix-it与实时语法检查365
9.3.4 导航366
9.3.5 查找368
9.4 在模拟器中运行369
9.5 调试370
9.5.1 原始调试370
9.5.2 Xcode调试器372
9.6 测试378
9.7 清理383
9.8 在设备中运行384
9.8.1 在没有开发者计划成员资格的情况下运行386
9.8.2 获取开发者计划成员资格387
9.8.3 获取证书387
9.8.4 获取开发配置文件389
9.8.5 运行应用390
9.8.6 配置文件与设备管理390
9.9 分析391
9.9.1 仪表盘391
9.9.2 Instruments392
9.10 本地化394
9.10.1 本地化Info.plis
前言1
部分 语言
第1章 Swift架构纵览11
1.1 基础11
1.2 万物皆对象12
1.3 对象类型的3种风格14
1.4 变量14
1.5 函数15
1.6 Swift文件的结构16
1.7 作用域与生命周期19
1.8 对象成员20
1.9 命名空间20
1.10 模块21
1.11 实例22
1.12 为何使用实例24
1.13 self26
1.14 隐私27
1.15 设计29
1.15.1 对象类型与API29
1.15.2 实例创建、作用域与生命周期31
1.15.3 小结32
第2章 函数34
2.1 函数参数与返回值34
2.1.1 Void返回类型与参数37
2.1.2 函数签名38
2.2 外部参数名38
2.3 重载41
2.4 默认参数值42
2.5 可变参数43
2.6 可忽略参数44
2.7 可修改参数44
2.8 函数中的函数48
2.9 递归49
2.10 将函数作为值50
2.11 匿名函数53
2.12 定义与调用57
2.13 闭包58
2.13.1 闭包是如何改善代码的59
2.13.2 返回函数的函数61
2.13.3 使用闭包设置捕获变量64
2.13.4 使用闭包保存捕获的环境64
2.14 柯里化函数66
第3章 变量与简单类型68
3.1 变量作用域与生命周期68
3.2 变量声明69
3.3 计算初始化器72
3.4 计算变量73
3.5 setter观察者76
3.6 延迟初始化77
3.7 内建简单类型79
3.7.1 Bool80
3.7.2 数字81
3.7.3 String88
3.7.4 Character93
3.7.5 Range96
3.7.6 元组98
3.7.7 Optional102
第4章 对象类型114
4.1 对象类型声明与特性114
4.1.1 初始化器115
4.1.2 属性122
4.1.3 方法125
4.1.4 下标127
4.1.5 嵌套对象类型128
4.1.6 实例引用129
4.2 枚举131
4.2.1 带有固定值的Case132
4.2.2 带有类型值的Case133
4.2.3 枚举初始化器134
4.2.4 枚举属性136
4.2.5 枚举方法137
4.2.6 为何使用枚举138
4.3 结构体139
4.3.1 结构体初始化器、属性与方法139
4.3.2 将结构体作为命名空间140
4.4 类141
4.4.1 值类型与引用类型142
4.4.2 子类与父类146
4.4.3 类初始化器151
4.4.4 类析构器159
4.4.5 类属性与方法159
4.5 多态161
4.6 类型转换164
4.7 类型引用168
4.8 协议172
4.8.1 为何使用协议174
4.8.2 协议类型测试与转换176
4.8.3 声明协议177
4.8.4 可选协议成员178
4.8.5 类协议180
4.8.6 隐式初始化器180
4.8.7 字面值转换182
4.9 泛型183
4.9.1 泛型声明185
4.9.2 类型约束186
4.9.3 显式特化189
4.9.4 关联类型链190
4.9.5 附加约束192
4.10 扩展196
4.10.1 扩展对象类型196
4.10.2 扩展协议199
4.10.3 扩展泛型202
4.11 保护类型203
4.11.1 AnyObject203
4.11.2 AnyClass206
4.11.3 Any207
4.12 集合类型208
4.12.1 Array208
4.12.2 Dictionary222
4.12.3 Set227
第5章 流程控制与其他232
5.1 流程控制232
5.1.1 分支233
5.1.2 循环245
5.1.3 跳转250
5.2 运算符261
5.3 隐私性264
5.3.1 Private声明265
5.3.2 Public声明267
5.3.3 隐私性规则267
5.4 内省267
5.5 内存管理269
5.5.1 弱引用270
5.5.2 无主引用272
5.5.3 匿名函数中的弱引用与无主引用273
5.5.4 协议类型引用的内存管理275
第二部分 IDE
第6章 Xcode项目剖析279
6.1 新建项目279
6.2 项目窗口281
6.2.1 导航窗格282
6.2.2 辅助窗格288
6.2.3 编辑器289
6.3 项目文件及其依赖291
6.4 目标293
6.4.1 构建阶段294
6.4.2 构建设置296
6.4.3 配置297
6.4.4 方案与目标298
6.5 从项目到运行应用300
6.5.1 构建设置303
6.5.2 属性列表设置303
6.5.3 nib文件304
6.5.4 其他资源305
6.5.5 代码文件与应用启动过程307
6.5.6 框架与SDK312
6.6 对项目内容进行重命名314
第7章 nib管理316
7.1 nib编辑器界面概览317
7.1.1 文档大纲318
7.1.2 画布321
7.1.3 查看器与库323
7.2 nib加载324
7.2.1 何时加载nib325
7.2.2 手工加载nib326
7.3 连接328
7.3.1 插座变量328
7.3.2 nib拥有者330
7.3.3 自动配置nib333
7.3.4 误配置的插座变量333
7.3.5 删除插座变量335
7.3.6 创建插座变量的其他方式335
7.3.7 插座变量集合338
7.3.8 动作连接339
7.3.9 创建动作的其他方式340
7.3.10 误配置的动作342
7.3.11 nib之间的连接——不行!342
7.4 nib实例的其他配置343
第8章 文档346
8.1 文档窗口346
8.2 类文档页面349
8.3 示例代码351
8.4 快速帮助352
8.5 符号353
8.6 头文件354
8.7 互联网资源355
第9章 项目的生命周期356
9.1 设备架构与条件代码356
9.1.1 向后兼容357
9.1.2 设备类型359
9.2 版本控制360
9.3 编辑与代码导航362
9.3.1 自动补令363
9.3.2 代码片段364
9.3.3 Fix-it与实时语法检查365
9.3.4 导航366
9.3.5 查找368
9.4 在模拟器中运行369
9.5 调试370
9.5.1 原始调试370
9.5.2 Xcode调试器372
9.6 测试378
9.7 清理383
9.8 在设备中运行384
9.8.1 在没有开发者计划成员资格的情况下运行386
9.8.2 获取开发者计划成员资格387
9.8.3 获取证书387
9.8.4 获取开发配置文件389
9.8.5 运行应用390
9.8.6 配置文件与设备管理390
9.9 分析391
9.9.1 仪表盘391
9.9.2 Instruments392
9.10 本地化394
9.10.1 本地化Info.plis
前 言
前言2014年6月2日,苹果公司在WWDC大会后宣布了一项令人震惊的公告:“我们开发了一门全新的编程语言。”开发者社区对此感到非常惊讶,因为他们已经习惯了Objective-C,因此开始怀疑苹果公司是否有能力将既有资产迁移过来。不过,这一次开发者社区错了。
Swift发布后,众多开发者立刻开始检视这门新语言:学习并批判它,决定是否该使用它。我的步就是将自己所有的iOS应用都转换为Swift;这足以说服我自己,虽然Swift有各种各样的缺点,但它值得每一个iOS编程新兵去掌握;自此以后,我的书都会假设读者使用的是Swift。
Swift语言从一开始的设计上就具备如下主要特性:
面向对象Swift是一门现代化的、面向对象的语言。它是完全面向对象的:“一切皆对象。”
清晰Swift易于阅读和编写,其语法糖很少,隐藏的捷径也不多。其语法清晰、一致且明确。
安全Swift使用强类型,从而确保它知道(并且你也知道)在每一时刻每个对象引用都是什么类型的。
小巧Swift是一门小巧的语言,提供了一些基本的类型与功能,除此之外别无其他。其他功能需要由你的代码,或你所使用的代码库(如Cocoa)来提供。
内存管理Swift会自动管理内存。你很少需要考虑内存管理问题。
兼容于CocoaCocoa API是由C和Objective-C编写的。Swift在设计时就明确保证可与大多数Cocoa API交互。
这些特性使得Swift成为学习iOS编程的一门优秀语言。
其他选择Objective-C依然存在,如果你喜欢还可以使用它。实际上,编写一个同时包含Swift代码与Objective-C代码的应用是很容易的;有时也需要这么做。不过,Objective-C缺少Swift的一些优势。Objective-C在C之上增加了面向对象特性。因此,它只是部分面向对象的;它同时拥有对象与标量数据类型,其对象需要对应于一种特殊的C数据类型(指针)。其语法掌握起来很困难;阅读与编写嵌套的方法调用会让人眼花,它还引入了一些黑科技,如隐式的nil测试。其类型检查可以而且经常关闭,这会导致程序员犯错,将消息发送给错误的对象类型并导致程序崩溃。Objective-C使用了手工的内存管理;新引入的ARC(自动引用计数)减轻了程序员的一些负担,并且极大地降低了程序员犯错的可能性,不过错误依旧有可能发生,内存管理终还是要靠手工来完成。
近向Objective-C增加或修订的特性(ARC、合成与自动合成、改进的字面值数组与字典的语法、块等)让Objective-C变得更加简单和便捷,不过这些修复也使语言变得更加庞大,甚至会引起困惑。由于Objective-C必须要包含C,因此其可扩展和修订的程度会受到限制。另一方面,Swift则是个全新的开始。如果你梦想完全修订Objective-C,从而创建一个更棒的Objective-C,那么Swift可能就是你所需要的。它将一个先进、合理的前端置于你与Cocoa Objective-C API之间。
因此,Swift就是本书通篇所使用的编程语言。不过,读者还需要对Objective-C(包括C)有所了解。Foundation与Cocoa API(这些内建的命令是你的代码一定会用到的,从而让iOS设备上的一切可以实现)依旧使用C与Objective-C编写。为了与它们进行交互,你需要知道这些语言需要什么。比如,为了在需要NSArray时可以传递一个Swift数组,你需要知道到底是什么对象可以作为Objective-C NSArray的元素。
因此,本书虽然不会讲解Objective-C,但我会对其进行足够充分的介绍,从而使你在文档和互联网上遇到这类问题时能够知道解决方案,我还会时不时地展示一些Objective-C代码。本书第三部分关于Cocoa的介绍会帮助大家以Objective-C的方式来思考——因为Cocoa API的结构与行为基本上是基于Objective-C的。本书后的附录会详细介绍Swift与Objective-C之间的交互方式,同时还会介绍如何以Swift和Objective-C混合编程来编写应用。
本书范围本书实际上是我的另一本书《Programming iOS 9》的配套参考书,该书以本书的结束作为起点。它们之间是互补的。我相信,这两本书的结构合理、内容通俗易懂。它们提供了开始编写iOS应用所需的完整基础知识;这样,在开始编写iOS应用时,你会对将要做的事情以及方向有着深刻的理解。如果编写iOS程序类似于用砖盖房子,那么本书将会介绍什么是砖以及如何使用它,而《Programming iOS 9》则会给你一些实际的砖并告诉你如何将其堆砌起来。
阅读完本书后,你将知道Swift、Xcode以及Cocoa框架的基础,接下来就可以直接开始阅读《Programming iOS 9》了。相反,《Programming iOS 9》假设你已经掌握了本书所介绍的内容;一开始它就会介绍视图与视图控制器,同时假设你已经掌握了语言本身和Xcode IDE。如果开始阅读《Programming iOS 9》并且想知道书中一些没有讲解过的东西,如Swift语言基础、UIApplicationMain函数、nib加载机制、Cocoa的委托与通知模式、保持循环等,那就不要尝试在该书中寻找答案了,我并没有在那本书中介绍这些内容,因为这里都介绍过了。
本书的3部分内容将会介绍iOS编程的基础知识:
部分从头开始介绍Swift语言。我没有假设你知道任何其他的编程语言。我讲解Swift的方式与其
Swift发布后,众多开发者立刻开始检视这门新语言:学习并批判它,决定是否该使用它。我的步就是将自己所有的iOS应用都转换为Swift;这足以说服我自己,虽然Swift有各种各样的缺点,但它值得每一个iOS编程新兵去掌握;自此以后,我的书都会假设读者使用的是Swift。
Swift语言从一开始的设计上就具备如下主要特性:
面向对象Swift是一门现代化的、面向对象的语言。它是完全面向对象的:“一切皆对象。”
清晰Swift易于阅读和编写,其语法糖很少,隐藏的捷径也不多。其语法清晰、一致且明确。
安全Swift使用强类型,从而确保它知道(并且你也知道)在每一时刻每个对象引用都是什么类型的。
小巧Swift是一门小巧的语言,提供了一些基本的类型与功能,除此之外别无其他。其他功能需要由你的代码,或你所使用的代码库(如Cocoa)来提供。
内存管理Swift会自动管理内存。你很少需要考虑内存管理问题。
兼容于CocoaCocoa API是由C和Objective-C编写的。Swift在设计时就明确保证可与大多数Cocoa API交互。
这些特性使得Swift成为学习iOS编程的一门优秀语言。
其他选择Objective-C依然存在,如果你喜欢还可以使用它。实际上,编写一个同时包含Swift代码与Objective-C代码的应用是很容易的;有时也需要这么做。不过,Objective-C缺少Swift的一些优势。Objective-C在C之上增加了面向对象特性。因此,它只是部分面向对象的;它同时拥有对象与标量数据类型,其对象需要对应于一种特殊的C数据类型(指针)。其语法掌握起来很困难;阅读与编写嵌套的方法调用会让人眼花,它还引入了一些黑科技,如隐式的nil测试。其类型检查可以而且经常关闭,这会导致程序员犯错,将消息发送给错误的对象类型并导致程序崩溃。Objective-C使用了手工的内存管理;新引入的ARC(自动引用计数)减轻了程序员的一些负担,并且极大地降低了程序员犯错的可能性,不过错误依旧有可能发生,内存管理终还是要靠手工来完成。
近向Objective-C增加或修订的特性(ARC、合成与自动合成、改进的字面值数组与字典的语法、块等)让Objective-C变得更加简单和便捷,不过这些修复也使语言变得更加庞大,甚至会引起困惑。由于Objective-C必须要包含C,因此其可扩展和修订的程度会受到限制。另一方面,Swift则是个全新的开始。如果你梦想完全修订Objective-C,从而创建一个更棒的Objective-C,那么Swift可能就是你所需要的。它将一个先进、合理的前端置于你与Cocoa Objective-C API之间。
因此,Swift就是本书通篇所使用的编程语言。不过,读者还需要对Objective-C(包括C)有所了解。Foundation与Cocoa API(这些内建的命令是你的代码一定会用到的,从而让iOS设备上的一切可以实现)依旧使用C与Objective-C编写。为了与它们进行交互,你需要知道这些语言需要什么。比如,为了在需要NSArray时可以传递一个Swift数组,你需要知道到底是什么对象可以作为Objective-C NSArray的元素。
因此,本书虽然不会讲解Objective-C,但我会对其进行足够充分的介绍,从而使你在文档和互联网上遇到这类问题时能够知道解决方案,我还会时不时地展示一些Objective-C代码。本书第三部分关于Cocoa的介绍会帮助大家以Objective-C的方式来思考——因为Cocoa API的结构与行为基本上是基于Objective-C的。本书后的附录会详细介绍Swift与Objective-C之间的交互方式,同时还会介绍如何以Swift和Objective-C混合编程来编写应用。
本书范围本书实际上是我的另一本书《Programming iOS 9》的配套参考书,该书以本书的结束作为起点。它们之间是互补的。我相信,这两本书的结构合理、内容通俗易懂。它们提供了开始编写iOS应用所需的完整基础知识;这样,在开始编写iOS应用时,你会对将要做的事情以及方向有着深刻的理解。如果编写iOS程序类似于用砖盖房子,那么本书将会介绍什么是砖以及如何使用它,而《Programming iOS 9》则会给你一些实际的砖并告诉你如何将其堆砌起来。
阅读完本书后,你将知道Swift、Xcode以及Cocoa框架的基础,接下来就可以直接开始阅读《Programming iOS 9》了。相反,《Programming iOS 9》假设你已经掌握了本书所介绍的内容;一开始它就会介绍视图与视图控制器,同时假设你已经掌握了语言本身和Xcode IDE。如果开始阅读《Programming iOS 9》并且想知道书中一些没有讲解过的东西,如Swift语言基础、UIApplicationMain函数、nib加载机制、Cocoa的委托与通知模式、保持循环等,那就不要尝试在该书中寻找答案了,我并没有在那本书中介绍这些内容,因为这里都介绍过了。
本书的3部分内容将会介绍iOS编程的基础知识:
部分从头开始介绍Swift语言。我没有假设你知道任何其他的编程语言。我讲解Swift的方式与其
评论
还没有评论。