版本
Xcode 11.0
Swift 5.1
前言
我的Swift篇系列文章主要记录一些基础知识点及个人心得, 方便日后查看. 如需更权威更全面的教程可参考以下:
- 中文版 Apple 官方 Swift 教程: SwiftGG. 该翻译项目由 numbbbbb 发起并主导, 已经得到了苹果官方的 认可(Translations 部分). GitHub连接为the-swift-programming-language-in-chinese.
- 菜鸟教程Swift 教程.
- 极客学院iOS开发.
关于Swift
Swift 是一种支持多编程范式和编译式的开源编程语言, 苹果于2014年WWDC(苹果开发者大会)发布,用于开发 iOS, macOS, watchOS及tvOS应用程序。
2015年6月8日,苹果于WWDC 2015上宣布,Swift将开放源代码,包括编译器和标准库。
Swift 在 macOS 和 iOS 平台可以和 Objective-C 使用相同的运行环境.
Swift 通过采用现代编程模式来避免大量常见编程错误:
- 变量始终在使用前初始化。
- 检查数组索引超出范围的错误。
- 检查整数是否溢出。
- 可选值确保明确处理 nil 值。
- 内存被自动管理。
- 错误处理允许从意外故障控制恢复。
Swift历史版本
以下摘录自SwiftGG, 不建议逐行阅读, 只需浏览大概即可.
2019-09-10
- 更新至 Swift 5.1。
- 在 不透明类型 篇章中新增了有关函数返回值遵循指定协议,而不需要提供指定返回类型的内容。
- 在 属性包装器 章节中新增了有关属性包装器的内容。
- 在 冻结 章节中新增了有关因库演变而需要的枚举和结构体冻结。
- 新增 隐式返回的函数 和 简化 Getter 声明 章节,其中包含函数省略
return 的内容。
- 在 类型下标 章节中新增了有关在类型中使用下标的内容。
- 更新 枚举 Case 模式匹配 章节,现在枚举 case 模式匹配支持匹配可选值。
- 更新 结构体的逐一成员构造器 章节,现在逐一成员构造器支持在属性有默认值时省略形参。
- 在 动态查找成员 章节中新增了有关在运行时用 key path 查找动态成员的内容。
- 在 条件编译代码块 中的目标环境里添加了
macCatalyst 。
- 更新 自身类型 章节,现在
Self 可以指向当前类,结构体或者枚举声明时的类型。
2019-03-25
2018-09-17
- 更新至 Swift 4.2。
- 在 遍历枚举情形 章节新增了有关访问所有枚举情形的内容。
- 在 编译诊断 章节新增了有关
#error 和 #warning 的内容。
- 在 属性声明 章节中新增了有关
inlinable 和 usableFromInline 属性的内容。
- 在 属性声明 章节中新增了有关
requires-stored-property-inits 和 warn-unqualified-access 属性的内容。
- 在 可选编译块 章节新增了有关如何根据 Swift 编译器版本对代码进行对应编译处理的内容。
- 在 字面量语法 章节新增了有关
#dsohandle 的内容。
2018-03-29
- 更新至 Swift 4.1。
- 在 等价运算符 章节新增了有关等价运算符的合成实现的内容。
- 在 声明 篇章中 申明拓展 章节和 协议 篇章中 有条件地遵循协议 章节新增了有关协议有条件遵循的内容。
- 在 关联类型约束中使用协议 章节中新增了有关递归协议约束的内容。
- 在 条件编译块 章节中新增了有关
canImport() 和 targetEnvironment() 平台条件的内容。
2017-12-04
2017-09-19
2017-03-27
- 更新至 Swift 3.1。
- 新增 范型 Where 子句扩展 章节,包含需要的扩展内容。
- 在 For-In 循环 章节中新增了区间迭代的例子。
- 在 到可失败构造器 章节中新增了可失败数值转换的例子。
- 在 声明特性 章节中新增了有关使用 Swift 语言版本的
available 特性的内容 。
- 更新 函数类型 章节中的讨论,注意在写函数类型时不允许使用参数标签。
- 更新 条件编译块 章节中的 Swift 语言版本号的讨论,现在可以使用可选的补丁版本号。
- 更新 函数类型 章节的讨论,现在 Swift 区分了采用多参数的函数和采用元组类型的单个参数的函数。
- 在 表达式 篇章中删除了动态表达式的章节,现在
type(of:) 是 Swift 标准库函数。
2016-10-27
- 更新至 Swift 3.0.1。
- 更新 自动引用计数 章节中有关 weak 和 unowned 引用的讨论。
- 在 声明标识符 章节中新增了有关新的标识符
unowned ,unowend(safe) 和 unowned(unsafe) 的内容。
- 在 Any 和 AnyObject 的类型转换 章节中新增了一处说明,有关使用类型
Any 作为可选值。
- 更新 表达式 章节,把括号表达式和元组表达式的描述分开。
2016-09-13
- 更新至 Swift 3.0。
- 更新 函数 篇章和 函数声明 章节中有关函数的讨论,所有函数参数默认都有函数标签。
- 更新 高级操作符 篇章中有关操作符的讨论,现在你可以作为类型函数来实现,替代之前的全局函数实现方式。
- 在 访问控制 章节中新增有关对新的访问级别描述符
open 和 fileprivate 的内容。
- 更新 函数声明 章节中有关
inout 的讨论,注意它现在出现在参数类型的前面,而不是在参数名称的前面。
- 更新 逃逸闭包 和 自动闭包 章节还有 属性 篇章中有关
@noescape 和 @autoclosure 的讨论,现在他们是类型属性,而不是定义属性。
- 在 高级操作符 篇章中 自定义中缀操作符的优先级 章节和 定义 篇章中 优先级组声明 章节中新增了有关操作符优先级组的内容。
- 更新一些讨论,使用 macOS 替换掉 OS X, Error 替换掉 ErrorProtocol。更新一些协议名称,比如使用 ExpressibleByStringLiteral 替换掉 StringLiteralConvertible。
- 更新 泛型 篇章中 泛型 Where 语句 章节和 泛型形参和实参 篇章的讨论,现在泛型的 where 语句写在一个声明的最后。
- 更新 逃逸闭包 章节中的讨论,现在闭包默认为非逃逸的。
- 更新 基础部分 篇章中 可选绑定 章节和 语句 篇章中 While 语句 章节中的讨论,现在 if,
while 和 guard 语句使用逗号分隔条件列表,不需要使用 where 语句。
- 在 控制流 篇章中 Switch 章节和 语句 篇章中 Switch 语句 章节中新增了 switch cases 可以使用多模式的内容。
- 更新 函数类型 章节有关现在函数参数标签不包含在函数类型中的讨论。
- 更新 协议 篇章中 协议组合 章节和 类型 篇章中 协议组合类型 章节中有关使用新的 Protocol1 & Protocol2 语法的内容。
- 更新动态类型表达式章节中使用新的
type(of:) 表达式的讨论。
- 更新 行控制表达式 章节中使用
#sourceLocation(file:line:) 表达式的讨论。
- 更新 永不返回函数 章节中使用 新的
Never 类型的讨论。
- 在 字面量表达式 章节中新增了有关
playground 字面量的内容。
- 更新 In-Out 参数 章节,标明只有非逃逸闭包能捕获
in-out 参数。
- 更新 默认参数值 章节,现在默认参数不能在调用时候重新排序。
- 更新 属性 篇章中有关属性参数使用分号的说明。
- 在 重新抛出函数和方法 章节中新增了有关在 catch 代码块中抛出错误的重新抛出函数的内容。
- 在 Selector 表达式 章节中新增了中有关访问 Objective-C 中 Selector 的 getter 和 setter 的内容。
- 在 类型别名声明 章节中中新增了有关泛型类型别名和在协议内使用类型别名的内容。
- 更新 函数类型 章节中有关函数类型的讨论,标明函数类型作为参数类型必须使用括号包裹。
- 更新 属性 篇章,标明
@IBAction ,@IBOutlet 和 @NSManaged 隐式含有 @objc 属性。
- 在 声明属性 章节中新增了有关
@GKInspectable 的内容。
- 更新 可选协议要求 章节中有关只能在与
Objective-C 交互的代码中才能使用可选协议要求的内容。
- 删除 函数声明 章节中有关显式使用
let 关键字作为函数参数的内容。
- 删除 语句 章节中有关
Boolean 协议的内容, 现在这个协议已经被 Swift 标准库删除。
- 更正 声明属性 章节中有关
@NSApplicationMain 协议的内容。
2016-03-21
- 更新至 Swift 2.2。
- 在 编译配置语句 章节新增了中有关如何根据 Swift 版本进行条件编译。
- 在 显示成员表达式 章节中新增了有关如何区分只有参数名不同的方法和构造器的内容。
- 在 选择器表达式 章节中新增了了针对 Objective-C 选择器的
#selector 语法。
- 更新 关联类型 和 协议关联类型声明 章节中有关使用
associatedtype 关键词修饰关联类型的讨论。
- 更新 可失败构造器 章节中有关当构造器在实例完全初始化之前返回
nil 的相关内容。
- 在 比较运算符 章节中新增了比较元组的内容。
- 在 关键字和标点符号 章节中新增了使用关键字作为外部参数名的内容。
- 更新 声明特性 章节中有关
@objc 特性的讨论,并指出枚举和枚举用例。
- 更新 操作符 章节中对于自定义运算符的包含了
. 的讨论。
- 在 重新抛出错误的函数和方法 章节中新增了一处说明,重新抛出错误函数不能直接抛出错误。
- 在 属性观察器 章节中新增了一处说明,当作为 in-out 参数传递属性时,属性观察器的调用行为。
- 在 Swift 初见 篇章中新增了错误处理的章节。
- 更新 弱引用 章节中的图片用以更清楚的展示重新分配过程。
- 删除 C 语言风格的
for 循环,++ 前缀和后缀运算符,以及 -- 前缀和后缀运算符。
- 删除对变量函数参数和柯里化函数的特殊语法的讨论。
2015-10-20
2015-09-16
- 更新至 Swift 2.0。
- 在 错误处理 篇章中新增了有关错误处理的相关内容,包括 Do 语句、 Throw 语句、 Defer 语句 以及 try 运算符。
- 更新 错误表示和抛出 章节,现在所有类型都可以遵循
ErrorType 协议了。
- 在 将错误装换成可选值 篇章增加了
try? 关键字相关内容。
- 在 枚举 篇章的 递归枚举 章节以及以及 声明 篇章的 任意类型用例的枚举 章节中新增了递归枚举相关内容。
- 在 控制流 篇章的 API 可用性检查 章节和 语句 篇章的 可用性条件 章节中新增了有关 API 可用性检查相关的内容。
- 在 控制流 篇章的 尽早退出 章节和 语句 篇章的 Guard 语句 章节新增了与
guard 语句相关的内容。
- 在 协议 篇章中 协议扩展 章节中新增了有关协议扩展的内容。
- 在 访问控制 篇章的 单元测试 target 的访问级别 章节中新增了有关单元测试访问控制相关的内容。
- 在 模式 篇章的 可选模式 章节中新增了可选模式相关内容。
- 更新 Repeat-While 章节中有关
repeat-while 循环相关的内容。
- 更新 字符串和字符 章节,现在
String 类型在 Swift 标准库中不再遵循 CollectionType 协议。
- 在 常量与变量打印 章节中新增了新 Swift 标准库中有关
print(-:separator:terminator) 相关内容。
- 在 枚举 篇章的 原始值的隐式赋值 章节和 声明 篇章的 包含原始值类型的枚举 章节中新增了有关包含
String 原始值的枚举用例的行为相关内容。
- 在 自动闭包 章节中新增了有关
@autoclosure 特性的相关内容,包括它的 @autoclosure(escaping) 形式。
- 更新 声明特性 章节中有关
@avaliable 和 warn-unused-result 特性的相关内容。
- 更新 类型特性 章节中有关
@convention 特性的相关内容。
- 在 可选绑定 章节中新增了有关使用
where 子句进行多可选绑定的相关内容。
- 在 字符串字面量 章节中新增了有关在编译时使用
+ 运算符拼接字符串字面量的相关内容。
- 在 元类型 章节中新增了有关元类型值的比较和使用它们通过构造器表达式构造实例相关内容。
- 在 断言调试 章节中新增了一处说明,有关用户定义断言何时会失效。
- 更新 声明特性 章节中对
@NSManaged 特性的讨论,现在这个特性可以被应用到一个确定实例方法。
- 更新 可变参数 章节,现在可变参数可以声明在函数参数列表的任意位置中。
- 在 重写可失败构造器 章节中新增了有关非可失败构造器相当于一个可失败构造器通过父类构造器的结果进行强制拆包的相关内容。
- 在 任意类型用例的枚举 章节中新增了有关枚举用例作为函数的内容。
- 在 构造器表达式 章节中新增了有关显式引用一个构造器相关内容。
- 在 编译控制语句 章节中新增了有关编译内容以及行控制语句相关内容。
- 在 元类型 章节新增了一处说明,有关如何从元类型值中构造类实例相关内容。
- 在 弱引用 章节新增了一处说明,有关弱引用作为缓存所存在的不足。
- 更新 类型特性 章节,提到了存储型特性其实是懒加载。
- 更新 捕获类型 章节,阐明了变量和常量在闭包中如何被捕获。
- 更新 声明特性 章节,用以描述何时在类中使用
@objc 关键字。
- 在 错误处理 章节中新增了一处说明,有关执行
throw 语句的性能。在 Do 语句 章节的 do 语句部分也新增了类似内容。
- 更新 类型特性 章节中有关类、结构体和枚举的存储型和计算型特性相关的内容。
- 更新 Break 语句 章节中有关带标签的 break 语句相关内容。
- 在 属性观察器 章节更新了一处说明,用来明确
willSet 和 didSet 观察器的行为。
- 在 访问级别 章节新增了有关
private 作用域的相关内容说明。
- 在 弱引用 章节新增了有关弱应用在垃圾回收系统和 ARC 之间的区别的说明。
- 更新 字符串字面量中特殊字符 章节,对 Unicode 标量更精确定义。
2015-04-08
- 更新至 Swift 1.2。
- Swift 现在自身提供了一个
Set 集合类型,更多内容,请看 Sets 。
-
@autoclosure 现在是一个参数声明的属性,而不是参数类型的属性。这里还有一个新的参数声明属性 @noescape 。更多内容,请看 属性声明 。
- 对于类型属性和方法现在可以使用
static 关键字作为声明描述符,更多内容,请看 类型变量属性。
- Swift 现在包含一个
as? 和 as! 的向下可失败类型转换运算符。更多内容,请看 协议遵循性检查。
- 新增 字符串索引 的新指导章节。
- 在 溢出运算符 一节中删除了溢出除运算符(
|
请发表评论