logo资料库

The Swift Programming Language 中文版.pdf

第1页 / 共457页
第2页 / 共457页
第3页 / 共457页
第4页 / 共457页
第5页 / 共457页
第6页 / 共457页
第7页 / 共457页
第8页 / 共457页
资料共457页,剩余部分请下载后查看
前言
3.0 更新说明
3.0 译者记录
目录
第 1 章 欢迎使用 Swift
关于 Swift(About Swift)
Swift 初见(A Swift Tour)
简单值
控制流
函数和闭包
对象和类
枚举和结构体
协议和扩展
错误处理
泛型
Swift 文档修订历史
Swift 3.1 更新
Swift 3.0 更新
Swift 2.2 更新
Swift 2.1 更新
Swift 2.0 更新
Swift 1.2 更新
Swift 1.1 更新
Swift 1.0 更新
The Swift Programming Language 中文版
这一次,让中国和世界同步
第 2 章 Swift 教程
基础部分(The Basics)
常量和变量
声明常量和变量
类型标注
常量和变量的命名
输出常量和变量
注释
分号
整数
整数范围
Int
UInt
浮点数
类型安全和类型推断
数值型字面量
数值型类型转换
整数转换
整数和浮点数转换
类型别名
布尔值
元组
可选类型
nil
if 语句以及强制解析
可选绑定
隐式解析可选类型
错误处理
断言
使用断言进行调试
何时使用断言
基本运算符(Basic Operators)
术语
赋值运算符
算术运算符
求余运算符
一元负号运算符
一元正号运算符
组合赋值运算符
比较运算符(Comparison Operators)
三目运算符(Ternary Conditional Operator)
空合运算符(Nil Coalescing Operator)
区间运算符(Range Operators)
闭区间运算符
半开区间运算符
逻辑运算符(Logical Operators)
逻辑非运算符
逻辑与运算符
逻辑或运算符
逻辑运算符组合计算
使用括号来明确优先级
字符串和字符(Strings and Characters)
字符串字面量
初始化空字符串
字符串可变性
字符串是值类型
使用字符
连接字符串和字符
字符串插值
Unicode
Unicode 标量
字符串字面量的特殊字符
可扩展的字形群集
计算字符数量
访问和修改字符串
字符串索引
插入和删除
比较字符串
字符串/字符相等
前缀/后缀相等
字符串的 Unicode 表示形式
UTF-8 表示
UTF-16 表示
Unicode 标量表示
集合类型 (Collection Types)
集合的可变性
数组(Arrays)
数组的简单语法
创建一个空数组
创建一个带有默认值的数组
通过两个数组相加创建一个数组
用数组字面量构造数组
访问和修改数组
数组的遍历
集合(Sets)
集合类型的哈希值
集合类型语法
创建和构造一个空的集合
用数组字面量创建集合
访问和修改一个集合
遍历一个集合
集合操作
基本集合操作
集合成员关系和相等
字典
字典类型简化语法
创建一个空字典
用字典字面量创建字典
访问和修改字典
字典遍历
控制流(Control Flow)
For-In 循环
While 循环
While
Repeat-While
条件语句
If
Switch
不存在隐式的贯穿
区间匹配
元组
值绑定(Value Bindings)
Where
复合匹配
控制转移语句
Continue
Break
循环语句中的 break
Switch 语句中的 break
贯穿
带标签的语句
提前退出
检测 API 可用性
函数(Functions)
函数的定义与调用
函数参数与返回值
无参数函数
多参数函数
无返回值函数
多重返回值函数
可选元组返回类型
函数参数标签和参数名称
指定参数标签
忽略参数标签
默认参数值
可变参数
输入输出参数
函数类型
使用函数类型
函数类型作为参数类型
函数类型作为返回类型
嵌套函数
闭包(Closures)
闭包表达式
sorted 方法
闭包表达式语法
根据上下文推断类型
单表达式闭包隐式返回
参数名称缩写
运算符方法
尾随闭包
值捕获
闭包是引用类型
逃逸闭包
自动闭包
枚举(Enumerations)
枚举语法
使用 Switch 语句匹配枚举值
关联值
原始值
原始值的隐式赋值
使用原始值初始化枚举实例
递归枚举
类和结构体
类和结构体对比
定义语法
类和结构体实例
属性访问
结构体类型的成员逐一构造器
结构体和枚举是值类型
类是引用类型
恒等运算符
指针
类和结构体的选择
字符串、数组、和字典类型的赋值与复制行为
属性 (Properties)
存储属性
常量结构体的存储属性
延迟存储属性
存储属性和实例变量
计算属性
简化 setter 声明
只读计算属性
属性观察器
全局变量和局部变量
类型属性
类型属性语法
获取和设置类型属性的值
方法(Methods)
实例方法 (Instance Methods)
self 属性
在实例方法中修改值类型
在可变方法中给 self 赋值
类型方法
下标
下标语法
下标用法
下标选项
继承
定义一个基类
子类生成
重写
访问超类的方法,属性及下标
重写方法
重写属性
重写属性的 Getters 和 Setters
重写属性观察器
防止重写
构造过程
存储属性的初始赋值
构造器
默认属性值
自定义构造过程
构造参数
参数的内部名称和外部名称
不带外部名的构造器参数
可选属性类型
构造过程中常量属性的修改
默认构造器
结构体的逐一成员构造器
值类型的构造器代理
类的继承和构造过程
指定构造器和便利构造器
指定构造器和便利构造器的语法
类的构造器代理规则
规则 1
规则 2
规则 3
两段式构造过程
安全检查 1
安全检查 2
安全检查 3
安全检查 4
阶段 1
阶段 2
构造器的继承和重写
构造器的自动继承
规则 1
规则 2
指定构造器和便利构造器实践
可失败构造器
枚举类型的可失败构造器
带原始值的枚举类型的可失败构造器
构造失败的传递
重写一个可失败构造器
可失败构造器 init!
必要构造器
通过闭包或函数设置属性的默认值
析构过程
析构过程原理
析构器实践
自动引用计数
自动引用计数的工作机制
自动引用计数实践
类实例之间的循环强引用
解决实例之间的循环强引用
弱引用
无主引用
无主引用以及隐式解析可选属性
闭包引起的循环强引用
解决闭包引起的循环强引用
定义捕获列表
弱引用和无主引用
可选链式调用
使用可选链式调用代替强制展开
为可选链式调用定义模型类
通过可选链式调用访问属性
通过可选链式调用调用方法
通过可选链式调用访问下标
访问可选类型的下标
连接多层可选链式调用
在方法的可选返回值上进行可选链式调用
错误处理
表示并抛出错误
处理错误
用 throwing 函数传递错误
用 Do-Catch 处理错误
将错误转换成可选值
禁用错误传递
指定清理操作
类型转换
定义一个类层次作为例子
检查类型
向下转型
Any 和 AnyObject 的类型转换
嵌套类型
嵌套类型实践
引用嵌套类型
扩展(Extensions)
扩展语法
计算型属性
构造器
方法
可变实例方法
下标
嵌套类型
协议
协议语法
属性要求
方法要求
Mutating 方法要求
构造器要求
构造器要求在类中的实现
可失败构造器要求
协议作为类型
委托(代理)模式
通过扩展添加协议一致性
通过扩展遵循协议
协议类型的集合
协议的继承
类类型专属协议
协议合成
检查协议一致性
可选的协议要求
协议扩展
提供默认实现
为协议扩展添加限制条件
泛型
泛型所解决的问题
泛型函数
类型参数
命名类型参数
泛型类型
扩展一个泛型类型
类型约束
类型约束语法
类型约束实践
关联类型
关联类型实践
通过扩展一个存在的类型来指定关联类型
泛型 Where 语句
访问控制
模块和源文件
访问级别
访问级别基本原则
默认访问级别
单目标应用程序的访问级别
框架的访问级别
单元测试目标的访问级别
访问控制语法
自定义类型
元组类型
函数类型
枚举类型
原始值和关联值
嵌套类型
子类
常量、变量、属性、下标
Getter 和 Setter
构造器
默认构造器
结构体默认的成员逐一构造器
协议
协议继承
协议一致性
扩展
通过扩展添加协议一致性
泛型
类型别名
高级运算符
位运算符
按位取反运算符
按位与运算符
按位或运算符
按位异或运算符
按位左移、右移运算符
无符号整数的移位运算
有符号整数的移位运算
溢出运算符
数值溢出
优先级和结合性
运算符函数
前缀和后缀运算符
复合赋值运算符
等价运算符
自定义运算符
自定义中缀运算符的优先级
第 3 章 语言参考
关于语言参考(About the Language Reference)
如何阅读语法
词法结构(Lexical Structure)
空白与注释
标识符
关键字和标点符号
字面量
整数字面量
浮点数字面量
字符串字面量
运算符
类型(Types)
类型注解
类型标识符
元组类型
函数类型
数组类型
字典类型
可选类型
隐式解析可选类型
协议合成类型
元类型
类型继承子句
类型推断
表达式(Expressions)
前缀表达式
try 运算符
二元表达式
赋值表达式
三元条件运算符
类型转换运算符
基本表达式
字面量表达式
self 表达式
超类表达式
闭包表达式
捕获列表
隐式成员表达式
圆括号表达式
通配符表达式
选择器表达式
后缀表达式
函数调用表达式
构造器表达式
显式成员表达式
后缀 self 表达式
dynamicType 表达式
下标表达式
强制取值表达式
可选链表达式
语句(Statements)
循环语句
For-In 语句
While 语句
Repeat-While 语句
分支语句
If 语句
Guard 语句
Switch 语句
Switch 语句不能有遗漏
不存在隐式落入
带标签的语句
控制转移语句
Break 语句
Continue 语句
Fallthrough 语句
Return 语句
Throw 语句
Defer 语句
Do 语句
编译器控制语句
编译配置语句
行控制语句
可用性条件
声明(Declarations)
顶级代码
代码块
导入声明
常量声明
变量声明
存储型变量和存储型变量属性
计算型变量和计算型属性
存储型变量和属性的观察器
类型变量属性
类型别名声明
函数声明
参数名
输入输出参数
特殊参数
特殊方法
抛出错误的函数和方法
重抛错误的函数和方法
永不返回的函数
枚举声明
任意类型的枚举用例
递归枚举
拥有原始值的枚举用例
访问枚举用例
结构体声明
类声明
协议声明
协议属性声明
协议方法声明
协议构造器声明
协议下标声明
协议关联类型声明
构造器声明
可失败构造器
析构器声明
扩展声明
下标声明
运算符声明
优先级组声明
声明修饰符
访问控制级别
特性(Attributes)
声明特性
Interface Builder 使用的声明特性
类型特性
模式(Patterns)
通配符模式(Wildcard Pattern)
标识符模式(Identifier Pattern)
值绑定模式(Value-Binding Pattern)
元组模式
枚举用例模式(Enumeration Case Pattern)
可选模式(Optional Pattern)
类型转换模式(Type-Casting Patterns)
表达式模式(Expression Pattern)
泛型参数(Generic Parameters and Arguments)
泛型形参子句
Where 子句
泛型实参子句
语法总结(Summary of the Grammar)
语句
泛型参数
声明 (Declarations)
模式
属性
表达式
词法结构
类型
第 4 章 苹果官方Blog官方翻译
Access Control 权限控制的黑与白
private 私有的
internal 内部的
public 公开的
举个例子:
造个类型不是梦-白话Swift类型创建
自定义原型
代码示例如下:
注意:
实现默认值
注意:
代码示例如下:
支持基本布尔型初始化
代码示例如下:
注意:
其定义如下:
支持Bool类型判断
代码示例如下:
代码示例如下:
运行结果如下:
注意:
支持兼容各们各派的类型
代码示例如下:
代码运行结果如下:
注意:
完善OCBool的布尔基因体系:
WWDC里面的那个“大炮打气球”
Swift与C语言指针友好合作
用以输入/输出的参数指针
作为数组使用的参数指针
用作字符串参数的指针
指针参数转换的安全性
Swift里的值类型与引用类型
Swift里面的类型分为两种:
值类型与引用类型的区别
Mutation(修改)在安全中扮演的角色
如何选择类型?
本文由翻译自Apple Swift Blog :Value and Reference Types
访问控制和protected
本文由翻译自Apple Swift Blog :Access Control and Protected
可选类型完美解决占位问题
为Dictionary增加objectsForKeys函数
Swift中更简便的方法
内嵌可选类型
提供一个默认值
本文由翻译自Apple Swift Blog :Optionals Case Study: valuesForKeys
前言前言 2016.9.23: 已经更新到 Swift 3.0。 3.0 更新说明 3.0 更新说明 Swift 3.0 是自 Swift 开源以来第一个大的版本更新。从语言角度不兼容之前的 Swift 2.2 和 Swift 2.3 版 本。Swift 3.0 的更新说明,大家可以查看官方blog的说明,也可以关注 SwiftGG 最新的文章。学习官方文 档,是掌握语言特性点的最佳途径,感谢翻译的小伙伴们为 Swift 社区所做贡献! 3.0 译者记录 3.0 译者记录 相关issue - Functions: crayygy - Control Flow: Realank - Closures: LanfordCai - Protocols: chenming biao - The Basics:chenmingbiao - Advanced Operators: mmoaay Language Reference: - Attributes: WhoJave - Statements: chenmingjia - Declarations: chenmingjia - E xpressions: chenmingjia - Types: lettleprince - Generic Parameters and Arguments: chenmingjia 感谢阅读!
目录目录 前言前言. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 第 1 章第 1 章 欢迎使用 Swift 欢迎使用 Swift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 关于 Swift(About Swift) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Swift 初见(A Swift Tour) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Swift 文档修订历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 The Swift Programming Language 中文版 . . . . . . . . . . . . . . . . . . . . . . . 36 第 2 章第 2 章 Swift 教程 Swift 教程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3939 基础部分(The Basics) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 基本运算符(Basic Operators) . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 字符串和字符(Strings and Characters) . . . . . . . . . . . . . . . . . . . . . . 71 集合类型 (Collection Types) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 控制流(Control Flow) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 函数(Functions) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 闭包(Closures) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 枚举(Enumerations) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 类和结构体 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 属性 (Properties) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 方法(Methods) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 下标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 继承 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 构造过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 析构过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 自动引用计数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 可选链式调用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
错误处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 类型转换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 嵌套类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 扩展(Extensions) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 协议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 泛型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 访问控制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 高级运算符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 第 3 章第 3 章 语言参考语言参考 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310310 关于语言参考(About the Language Reference) . . . . . . . . . . . . . . . . . . . 311 词法结构(Lexical Structure) . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 类型(Types) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 表达式(Expressions) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 语句(Statements) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 声明(Declarations) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 特性(Attributes) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 模式(Patterns) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 泛型参数(Generic Parameters and Arguments) . . . . . . . . . . . . . . . . . . . 411 语法总结(Summary of the Grammar) . . . . . . . . . . . . . . . . . . . . . . . . 415 第 4 章第 4 章 苹果官方Blog官方翻译 苹果官方Blog官方翻译 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435435 Access Control 权限控制的黑与白 . . . . . . . . . . . . . . . . . . . . . . . . . . 436 造个类型不是梦-白话Swift类型创建 . . . . . . . . . . . . . . . . . . . . . . . . . 438 WWDC里面的那个“大炮打气球” . . . . . . . . . . . . . . . . . . . . . . . . . . . 444 Swift与C语言指针友好合作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445 用作字符串参数的指针 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 指针参数转换的安全性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 Swift里的值类型与引用类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
访问控制和protected . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 可选类型完美解决占位问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
11 欢迎使用 Swift 欢迎使用 Swift
在本章中您将了解 Swift 的特性和开发历史,并对 Swift 有一个初步的了解。 第 1 章 欢迎使用 Swift | 6
第 1 章 欢迎使用 Swift | 7 关于 Swift(About Swift) 关于 Swift(About Swift) 1.0 翻译:numbbbbb 校对:yeahdongcn 2.0 翻译+校对:xtymichael 3.0 翻译+校对:shanks,2016-10-06 3.0.1 review : 2016-11-09 Swift 是一种新的编程语言,用于编写 iOS,macOS,watchOS 和 tvOS 的应用程序。Swift 结合了 C 和 Object ive-C 的优点并且不受 C 兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简 单,更灵活,也更有趣。Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,它的降临将重新定义 软件开发。 Swift 的开发从很久之前就开始了。为了给 Swift 打好基础,苹果公司改进了编译器,调试器和框架结构。我们 使用自动引用计数(Automatic Reference Counting, ARC)来简化内存管理。我们在 Foundation 和 Cocoa 的 基础上构建框架栈使其完全现代化和标准化。 Objective-C 本身支持块、集合语法和模块,所以框架可以轻松支 持现代编程语言技术。正是得益于这些基础工作,我们现在才能发布这样一个用于未来苹果软件开发的新语言。 Objective-C 开发者对 Swift 并不会感到陌生。它采用了 Objective-C 的命名参数以及动态对象模型,可以无 缝对接到现有的 Cocoa 框架,并且可以兼容 Objective-C 代码。在此基础之上,Swift 还有许多新特性并且支 持过程式编程和面向对象编程。 Swift 对于初学者来说也很友好。它是第一个既满足工业标准又像脚本语言一样充满表现力和趣味的系统编程语 言。它支持代码预览(playgrounds),这个革命性的特性可以允许程序员在不编译和运行应用程序的前提下运行 S wift 代码并实时查看结果。 Swift 将现代编程语言的精华和苹果工程师文化的智慧结合了起来。编译器对性能进行了优化,编程语言对开发 进行了优化,两者互不干扰,鱼与熊掌兼得。Swift 既可以用于开发 “hello, world” 这样的小程序,也可以 用于开发一套完整的操作系统。所有的这些特性让 Swift 对于开发者和苹果来说都是一项值得的投资。 Swift 是编写 iOS,macOS,watchOS 和 tvOS 应用的极佳手段,并将伴随着新的特性和功能持续演进。我们对 S wift 充满信心,你还在等什么!
第 1 章 欢迎使用 Swift | 8 Swift 初见(A Swift Tour) Swift 初见(A Swift Tour) 1.0 翻译:numbbbbb 校对:shinyzhu, stanzhai 2.0 翻译+校对:xtymichael 2.2 翻译:175,2016-04-09 校对:SketchK,2016-05-11 3.0 翻译+校对:shanks,2016-10-06 3.0.1 review: 2016-11-09 本页内容包括: • 简单值(Simple Values) (页 0) • 控制流(Control Flow) (页 0) • 函数和闭包(Functions and Closures) (页 0) • 对象和类(Objects and Classes) (页 0) • 枚举和结构体(Enumerations and Structures) (页 0) • 协议和扩展(Protocols and Extensions) (页 0) • 错误处理(Error Handling) (页 0) • 泛型(Generics) (页 0) 通常来说,编程语言教程中的第一个程序应该在屏幕上打印“Hello, world”。在 Swift 中,可以用一行代码实 现: print("Hello, world!") 如果你写过 C 或者 Objective-C 代码,那你应该很熟悉这种形式——在 Swift 中,这行代码就是一个完整的程 序。你不需要为了输入输出或者字符串处理导入一个单独的库。全局作用域中的代码会被自动当做程序的入口 点,所以你也不需要 main() 函数。你同样不需要在每个语句结尾写上分号。 这个教程会通过一系列编程例子来让你对 Swift 有初步了解,如果你有什么不理解的地方也不用担心——任何本 章介绍的内容都会在后面的章节中详细讲解到。 注意: 最佳实践是,在 Xcode 作为 playground 打开本章,Playgrounds允许你编辑你的代码并且立即得到结 果。
分享到:
收藏