前言
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