update Revision History&Types
This commit is contained in:
@ -3,12 +3,12 @@
|
|||||||
### 2019-06-03
|
### 2019-06-03
|
||||||
|
|
||||||
* 更新至 Swift 5.1。
|
* 更新至 Swift 5.1。
|
||||||
* 在 [不透明类型]() 篇章中新增了有关函数返回值遵循指定协议,而不需要提供指定返回类型的内容。
|
* 在 [不透明类型](../chapter2/27_Opaque_Types.md) 篇章中新增了有关函数返回值遵循指定协议,而不需要提供指定返回类型的内容。
|
||||||
* 新增 [隐式返回的函数]() 和 [简化 Getter 声明]() 章节,其中包含函数省略 `return` 的内容。
|
* 新增 [隐式返回的函数](../chapter2/06_Functions.md#functions-with-an-implicit-return) 和 [简化 Getter 声明](../chapter2/10_Properties.md#shorthand-getter-declaration) 章节,其中包含函数省略 `return` 的内容。
|
||||||
* 在 [类型下标]() 章节中新增有关在类型中使用下标的内容。
|
* 在 [类型下标](../chapter2/12_Subscripts.md#type-subscripts) 章节中新增有关在类型中使用下标的内容。
|
||||||
* 更新 [结构体的逐一成员构造器]() 章节,现在逐一成员构造器支持在属性有默认值时省略形参。
|
* 更新 [结构体的逐一成员构造器](../chapter2/14_Initialization.md#memberwise-initializers-for-structure-types) 章节,现在逐一成员构造器支持在属性有默认值时省略形参。
|
||||||
* 在 [动态调用]() 章节中新增了有关在运行时用 key path 查找动态成员的内容。
|
* 在 [动态查找成员](../chapter3/07_Attributes.md#dynamicmemberlookup) 章节中新增了有关在运行时用 key path 查找动态成员的内容。
|
||||||
* 更新 [自身类型]() 章节,现在 `Self` 可以指向当前类,结构体或者枚举声明时的类型。
|
* 更新 [自身类型](../chapter3/03_Types.md#self-type-h) 章节,现在 `Self` 可以指向当前类,结构体或者枚举声明时的类型。
|
||||||
|
|
||||||
### 2019-03-25
|
### 2019-03-25
|
||||||
|
|
||||||
@ -34,7 +34,7 @@
|
|||||||
* 更新至 Swift 4.1。
|
* 更新至 Swift 4.1。
|
||||||
* 在 [等价运算符](../chapter2/26_Advanced_Operators.md#equivalence-operators) 章节新增了有关等价运算符的合成实现的内容。
|
* 在 [等价运算符](../chapter2/26_Advanced_Operators.md#equivalence-operators) 章节新增了有关等价运算符的合成实现的内容。
|
||||||
* 在 [声明](../chapter3/06_Declarations.md) 篇章中 [申明拓展](../chapter3/06_Declarations.md#extension-declaration) 章节和 [协议](../chapter2/21_Protocols.md) 篇章中 [有条件地遵循协议](../chapter2/21_Protocols.md#Conditionally-Conforming-to-a-Protocol) 章节新增了有关协议有条件遵循的内容。
|
* 在 [声明](../chapter3/06_Declarations.md) 篇章中 [申明拓展](../chapter3/06_Declarations.md#extension-declaration) 章节和 [协议](../chapter2/21_Protocols.md) 篇章中 [有条件地遵循协议](../chapter2/21_Protocols.md#Conditionally-Conforming-to-a-Protocol) 章节新增了有关协议有条件遵循的内容。
|
||||||
* 在 [关联类型约束中使用协议](../chapter2/22_Generics.md##using-a-protocol-in-its-associated-type's-constraints) 章节中新增了有关递归协议约束的内容。
|
* 在 [关联类型约束中使用协议](../chapter2/22_Generics.md#using-a-protocol-in-its-associated-type's-constraints) 章节中新增了有关递归协议约束的内容。
|
||||||
* 在 [条件编译块](../chapter3/05_Statements.md#Conditional-Compilation-Block) 章节中新增了有关 `canImport()` 和 `targetEnvironment()` 平台条件的内容。
|
* 在 [条件编译块](../chapter3/05_Statements.md#Conditional-Compilation-Block) 章节中新增了有关 `canImport()` 和 `targetEnvironment()` 平台条件的内容。
|
||||||
|
|
||||||
### 2017-12-04
|
### 2017-12-04
|
||||||
@ -50,7 +50,7 @@
|
|||||||
* 在 [字符串和字符](../chapter2/03_Strings_And_Characters.md) 篇章中 [字面量](../chapter2/03_Strings_And_Characters.md#string-literals) 章节以及 [词法结构](../chapter3/02_Lexical_Structure.md) 篇章的 [字符串字面量](../chapter3/02_Lexical_Structure.md#string-literal) 章节中新增了有关多行字符串字面量的内容。
|
* 在 [字符串和字符](../chapter2/03_Strings_And_Characters.md) 篇章中 [字面量](../chapter2/03_Strings_And_Characters.md#string-literals) 章节以及 [词法结构](../chapter3/02_Lexical_Structure.md) 篇章的 [字符串字面量](../chapter3/02_Lexical_Structure.md#string-literal) 章节中新增了有关多行字符串字面量的内容。
|
||||||
* 更新 [声明属性](../chapter3/07_Attributes.md#Ideclaration-attributes) 中 `objc` 属性的讨论,现在该属性会在更少的位置被推断出来。
|
* 更新 [声明属性](../chapter3/07_Attributes.md#Ideclaration-attributes) 中 `objc` 属性的讨论,现在该属性会在更少的位置被推断出来。
|
||||||
* 新增 [范型下标](../chapter2/22_Generics.md#generic-subscripts) 章节,现在下标也支持范型特性了。
|
* 新增 [范型下标](../chapter2/22_Generics.md#generic-subscripts) 章节,现在下标也支持范型特性了。
|
||||||
* 更新 [协议](../chapter2/21_Protocols.md) 篇章中 [协议组合](../chapter2/21_Protocols.md#protocol-composition) 章节和 [类型](../chapter3/03_Types.md) 篇章中 [协议组合类型](../chapter3/03_Types.md#protocol-composition) 章节的讨论,现在协议组合类型支持进行父类约束了。
|
* 更新 [协议](../chapter2/21_Protocols.md) 篇章中 [协议组合](../chapter2/21_Protocols.md#protocol-composition) 章节和 [类型](../chapter3/03_Types.md) 篇章中 [协议组合类型](../chapter3/03_Types.md#protocol-composition-type-h) 章节的讨论,现在协议组合类型支持进行父类约束了。
|
||||||
* 更新 [拓展声明](../chapter3/06_Declarations.md#extension-declaration) 中有关协议扩展的讨论,现在它们不支持 `final` 特性了。
|
* 更新 [拓展声明](../chapter3/06_Declarations.md#extension-declaration) 中有关协议扩展的讨论,现在它们不支持 `final` 特性了。
|
||||||
* 在 [断言和前置条件](../chapter2/01_TheBasics.md#assertions-and-preconditions) 章节中新增了部分前置条件和致命错误的内容。
|
* 在 [断言和前置条件](../chapter2/01_TheBasics.md#assertions-and-preconditions) 章节中新增了部分前置条件和致命错误的内容。
|
||||||
|
|
||||||
@ -61,9 +61,9 @@
|
|||||||
* 在 [For-In 循环](../chapter2/05_Control_Flow.md#for-in-loops) 章节中新增了区间迭代的例子。
|
* 在 [For-In 循环](../chapter2/05_Control_Flow.md#for-in-loops) 章节中新增了区间迭代的例子。
|
||||||
* 在 [到可失败构造器](http://typora-app/chapter2/14_Initialization.md#failable-initializers) 章节中新增了可失败数值转换的例子。
|
* 在 [到可失败构造器](http://typora-app/chapter2/14_Initialization.md#failable-initializers) 章节中新增了可失败数值转换的例子。
|
||||||
* 在 [声明特性](../chapter3/07_Attributes.md#Ideclaration-attributes) 章节中新增了有关使用 Swift 语言版本的 `available` 特性的内容 。
|
* 在 [声明特性](../chapter3/07_Attributes.md#Ideclaration-attributes) 章节中新增了有关使用 Swift 语言版本的 `available` 特性的内容 。
|
||||||
* 更新 [函数类型](../chapter3/03_Types.md#function_type) 章节中的讨论,注意在写函数类型时不允许使用参数标签。
|
* 更新 [函数类型](../chapter3/03_Types.md#function-type-h) 章节中的讨论,注意在写函数类型时不允许使用参数标签。
|
||||||
* 更新 [条件编译块](../chapter3/05_Statements.md#Conditional-Compilation-Block) 章节中的 Swift 语言版本号的讨论,现在可以使用可选的补丁版本号。
|
* 更新 [条件编译块](../chapter3/05_Statements.md#Conditional-Compilation-Block) 章节中的 Swift 语言版本号的讨论,现在可以使用可选的补丁版本号。
|
||||||
* 更新 [函数类型](../chapter3/03_Types.md#function_type) 章节的讨论,现在 Swift 区分了采用多参数的函数和采用元组类型的单个参数的函数。
|
* 更新 [函数类型](../chapter3/03_Types.md#function-type-h) 章节的讨论,现在 Swift 区分了采用多参数的函数和采用元组类型的单个参数的函数。
|
||||||
* 在 [表达式](../chapter3/04_Expressions.md) 篇章中删除了动态表达式的章节,现在 `type(of:)` 是 Swift 标准库函数。
|
* 在 [表达式](../chapter3/04_Expressions.md) 篇章中删除了动态表达式的章节,现在 `type(of:)` 是 Swift 标准库函数。
|
||||||
|
|
||||||
### 2016-10-27
|
### 2016-10-27
|
||||||
@ -88,8 +88,8 @@
|
|||||||
* 更新 [逃逸闭包](../chapter2/07_Closures.md#escaping-closures) 章节中的讨论,现在闭包默认为非逃逸的。
|
* 更新 [逃逸闭包](../chapter2/07_Closures.md#escaping-closures) 章节中的讨论,现在闭包默认为非逃逸的。
|
||||||
* 更新 [基础部分](../chapter2/01_TheBasics.md) 篇章中 [可选绑定](../chapter2/01_TheBasics.md#optional-binding) 章节和 [语句](../chapter3/05_Statements.md) 篇章中 [While 语句](../chapter3/05_Statements.md#while-statement) 章节中的讨论,现在 if,`while` 和 `guard` 语句使用逗号分隔条件列表,不需要使用 `where` 语句。
|
* 更新 [基础部分](../chapter2/01_TheBasics.md) 篇章中 [可选绑定](../chapter2/01_TheBasics.md#optional-binding) 章节和 [语句](../chapter3/05_Statements.md) 篇章中 [While 语句](../chapter3/05_Statements.md#while-statement) 章节中的讨论,现在 if,`while` 和 `guard` 语句使用逗号分隔条件列表,不需要使用 `where` 语句。
|
||||||
* 在 [控制流](../chapter2/05_Control_Flow.md) 篇章中 [Switch](../chapter2/05_Control_Flow.md#switch) 章节和 [语句](../chapter3/05_Statements.md) 篇章中 [Switch 语句](../chapter3/05_Statements.md#switch-statement) 章节中新增了 switch cases 可以使用多模式的内容。
|
* 在 [控制流](../chapter2/05_Control_Flow.md) 篇章中 [Switch](../chapter2/05_Control_Flow.md#switch) 章节和 [语句](../chapter3/05_Statements.md) 篇章中 [Switch 语句](../chapter3/05_Statements.md#switch-statement) 章节中新增了 switch cases 可以使用多模式的内容。
|
||||||
* 更新 [函数类型](../chapter3/03_Types.md#function_type) 章节有关现在函数参数标签不包含在函数类型中的讨论。
|
* 更新 [函数类型](../chapter3/03_Types.md#function-type-h) 章节有关现在函数参数标签不包含在函数类型中的讨论。
|
||||||
* 更新 [协议](../chapter2/21_Protocols.md) 篇章中 [协议组合](../chapter2/21_Protocols.md#protocol-composition) 章节和 [类型](../chapter3/03_Types.md) 篇章中 [协议组合类型](../chapter3/03_Types.md#protocol-composition) 章节中有关使用新的 Protocol1 & Protocol2 语法的内容。
|
* 更新 [协议](../chapter2/21_Protocols.md) 篇章中 [协议组合](../chapter2/21_Protocols.md#protocol-composition) 章节和 [类型](../chapter3/03_Types.md) 篇章中 [协议组合类型](../chapter3/03_Types.md#protocol-composition-type-h) 章节中有关使用新的 Protocol1 & Protocol2 语法的内容。
|
||||||
* 更新动态类型表达式章节中使用新的 `type(of:)` 表达式的讨论。
|
* 更新动态类型表达式章节中使用新的 `type(of:)` 表达式的讨论。
|
||||||
* 更新 [行控制表达式](../chapter3/05_Statements.md#line-control-statement) 章节中使用 `#sourceLocation(file:line:)` 表达式的讨论。
|
* 更新 [行控制表达式](../chapter3/05_Statements.md#line-control-statement) 章节中使用 `#sourceLocation(file:line:)` 表达式的讨论。
|
||||||
* 更新 [永不返回函数](../chapter3/06_Declarations.md#functions-that-never-return) 章节中使用 新的 `Never` 类型的讨论。
|
* 更新 [永不返回函数](../chapter3/06_Declarations.md#functions-that-never-return) 章节中使用 新的 `Never` 类型的讨论。
|
||||||
@ -100,7 +100,7 @@
|
|||||||
* 在 [重新抛出函数和方法](../chapter3/06_Declarations.md#rethrowing-functions-and-methods) 章节中新增了有关在 catch 代码块中抛出错误的重新抛出函数的内容。
|
* 在 [重新抛出函数和方法](../chapter3/06_Declarations.md#rethrowing-functions-and-methods) 章节中新增了有关在 catch 代码块中抛出错误的重新抛出函数的内容。
|
||||||
* 在 [Selector 表达式](../chapter3/04_Expressions.md#selector-expression7) 章节中新增了中有关访问 Objective-C 中 Selector 的 getter 和 setter 的内容。
|
* 在 [Selector 表达式](../chapter3/04_Expressions.md#selector-expression7) 章节中新增了中有关访问 Objective-C 中 Selector 的 getter 和 setter 的内容。
|
||||||
* 在 [类型别名声明](../chapter3/06_Declarations.md#type-alias-declaration) 章节中中新增了有关泛型类型别名和在协议内使用类型别名的内容。
|
* 在 [类型别名声明](../chapter3/06_Declarations.md#type-alias-declaration) 章节中中新增了有关泛型类型别名和在协议内使用类型别名的内容。
|
||||||
* 更新 [函数类型](../chapter3/03_Types.md#function_type) 章节中有关函数类型的讨论,标明函数类型作为参数类型必须使用括号包裹。
|
* 更新 [函数类型](../chapter3/03_Types.md#function-type-h) 章节中有关函数类型的讨论,标明函数类型作为参数类型必须使用括号包裹。
|
||||||
* 更新 [属性](../chapter3/07_Attributes.md) 篇章,标明 `@IBAction`,`@IBOutlet` 和 `@NSManaged` 隐式含有 `@objc` 属性。
|
* 更新 [属性](../chapter3/07_Attributes.md) 篇章,标明 `@IBAction`,`@IBOutlet` 和 `@NSManaged` 隐式含有 `@objc` 属性。
|
||||||
* 在 [声明属性](../chapter3/07_Attributes.md#Ideclaration-attributes) 章节中新增了有关 `@GKInspectable` 的内容。
|
* 在 [声明属性](../chapter3/07_Attributes.md#Ideclaration-attributes) 章节中新增了有关 `@GKInspectable` 的内容。
|
||||||
* 更新 [可选协议要求](../chapter2/21_Protocols.md#optional-protocol-requirements) 章节中有关只能在与 `Objective-C` 交互的代码中才能使用可选协议要求的内容。
|
* 更新 [可选协议要求](../chapter2/21_Protocols.md#optional-protocol-requirements) 章节中有关只能在与 `Objective-C` 交互的代码中才能使用可选协议要求的内容。
|
||||||
@ -160,7 +160,7 @@
|
|||||||
* 更新 [类型特性](../chapter3/07_Attributes.md#type-attributes) 章节中有关 `@convention` 特性的相关内容。
|
* 更新 [类型特性](../chapter3/07_Attributes.md#type-attributes) 章节中有关 `@convention` 特性的相关内容。
|
||||||
* 在 [可选绑定](../chapter2/01_TheBasics.md#optional-binding) 章节中新增了有关使用 `where` 子句进行多可选绑定的相关内容。
|
* 在 [可选绑定](../chapter2/01_TheBasics.md#optional-binding) 章节中新增了有关使用 `where` 子句进行多可选绑定的相关内容。
|
||||||
* 在 [字符串字面量](../chapter3/02_Lexical_Structure.md#string-literal) 章节中新增了有关在编译时使用 `+` 运算符拼接字符串字面量的相关内容。
|
* 在 [字符串字面量](../chapter3/02_Lexical_Structure.md#string-literal) 章节中新增了有关在编译时使用 `+` 运算符拼接字符串字面量的相关内容。
|
||||||
* 在 [元类型](../chapter3/03_Types.md#metatype-type) 章节中新增了有关元类型值的比较和使用它们通过构造器表达式构造实例相关内容。
|
* 在 [元类型](../chapter3/03_Types.md#metatype-type-h) 章节中新增了有关元类型值的比较和使用它们通过构造器表达式构造实例相关内容。
|
||||||
* 在 [断言调试](../chapter2/01_TheBasics.md#debugging-with-assertions) 章节中新增了一条提示,有关用户定义断言何时会失效。
|
* 在 [断言调试](../chapter2/01_TheBasics.md#debugging-with-assertions) 章节中新增了一条提示,有关用户定义断言何时会失效。
|
||||||
* 更新 [声明特性](../chapter3/07_Attributes.md#Ideclaration-attributes) 章节中对 `@NSManaged` 特性的讨论,现在这个特性可以被应用到一个确定实例方法。
|
* 更新 [声明特性](../chapter3/07_Attributes.md#Ideclaration-attributes) 章节中对 `@NSManaged` 特性的讨论,现在这个特性可以被应用到一个确定实例方法。
|
||||||
* 更新 [可变参数](../chapter2/06_Functions.md#variadic-parameters) 章节,现在可变参数可以声明在函数参数列表的任意位置中。
|
* 更新 [可变参数](../chapter2/06_Functions.md#variadic-parameters) 章节,现在可变参数可以声明在函数参数列表的任意位置中。
|
||||||
@ -168,7 +168,7 @@
|
|||||||
* 在 [任意类型用例的枚举](../chapter3/06_Declarations.md#enumerations-with-cases-of-any-type) 章节中新增了有关枚举用例作为函数的内容。
|
* 在 [任意类型用例的枚举](../chapter3/06_Declarations.md#enumerations-with-cases-of-any-type) 章节中新增了有关枚举用例作为函数的内容。
|
||||||
* 在 [构造器表达式](../chapter3/04_Expressions.md#initializer-expression) 章节中新增了有关显式引用一个构造器相关内容。
|
* 在 [构造器表达式](../chapter3/04_Expressions.md#initializer-expression) 章节中新增了有关显式引用一个构造器相关内容。
|
||||||
* 在 [编译控制语句](../chapter3/05_Statements.md#compiler-control-statements) 章节中新增了有关编译内容以及行控制语句相关内容。
|
* 在 [编译控制语句](../chapter3/05_Statements.md#compiler-control-statements) 章节中新增了有关编译内容以及行控制语句相关内容。
|
||||||
* 在 [元类型](../chapter3/03_Types.md#metatype-type) 章节新增了一条提示,有关如何从元类型值中构造类实例相关内容。
|
* 在 [元类型](../chapter3/03_Types.md#metatype-type-h) 章节新增了一条提示,有关如何从元类型值中构造类实例相关内容。
|
||||||
* 在 [弱引用](../chapter2/23_Automatic_Reference_Counting.md#weak-references) 章节新增了一条提示,有关弱引用作为缓存所存在的不足。
|
* 在 [弱引用](../chapter2/23_Automatic_Reference_Counting.md#weak-references) 章节新增了一条提示,有关弱引用作为缓存所存在的不足。
|
||||||
* 更新 [类型特性](../chapter2/10_Properties.md#type-properties) 章节,提到了存储型特性其实是懒加载。
|
* 更新 [类型特性](../chapter2/10_Properties.md#type-properties) 章节,提到了存储型特性其实是懒加载。
|
||||||
* 更新 [捕获类型](../chapter2/07_Closures.md#capturing_values) 章节,阐明了变量和常量在闭包中如何被捕获。
|
* 更新 [捕获类型](../chapter2/07_Closures.md#capturing_values) 章节,阐明了变量和常量在闭包中如何被捕获。
|
||||||
|
|||||||
@ -40,7 +40,7 @@ Swift 语言存在两种类型:命名型类型和复合型类型。*命名型
|
|||||||
>
|
>
|
||||||
> *类型* → **(** [类型](#type) **)**
|
> *类型* → **(** [类型](#type) **)**
|
||||||
|
|
||||||
## 类型注解
|
## 类型注解 {#type-annotation-h}
|
||||||
*类型注解*显式地指定一个变量或表达式的类型。类型注解始于冒号 `:` 终于类型,比如下面两个例子:
|
*类型注解*显式地指定一个变量或表达式的类型。类型注解始于冒号 `:` 终于类型,比如下面两个例子:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
@ -58,7 +58,7 @@ func someFunction(a: Int) { /* ... */ }
|
|||||||
#### type-annotation {#type-annotation}
|
#### type-annotation {#type-annotation}
|
||||||
> *类型注解* → **:** [*特性列表*](./07_Attributes.md#attributes)<sub>可选</sub> **输入输出参数**<sub>可选</sub> [*类型*](#type)
|
> *类型注解* → **:** [*特性列表*](./07_Attributes.md#attributes)<sub>可选</sub> **输入输出参数**<sub>可选</sub> [*类型*](#type)
|
||||||
|
|
||||||
## 类型标识符
|
## 类型标识符 {#type-identifier-h}
|
||||||
*类型标识符*引用命名型类型,还可引用命名型或复合型类型的别名。
|
*类型标识符*引用命名型类型,还可引用命名型或复合型类型的别名。
|
||||||
|
|
||||||
大多数情况下,类型标识符引用的是与之同名的命名型类型。例如类型标识符 `Int` 引用命名型类型 `Int`,同样,类型标识符 `Dictionary<String, Int>` 引用命名型类型 `Dictionary<String, Int>`。
|
大多数情况下,类型标识符引用的是与之同名的命名型类型。例如类型标识符 `Int` 引用命名型类型 `Int`,同样,类型标识符 `Dictionary<String, Int>` 引用命名型类型 `Dictionary<String, Int>`。
|
||||||
@ -86,7 +86,7 @@ var someValue: ExampleModule.MyType
|
|||||||
#### type-name {#type-name}
|
#### type-name {#type-name}
|
||||||
> *类型名称* → [*标识符*](./02_Lexical_Structure.md#identifier)
|
> *类型名称* → [*标识符*](./02_Lexical_Structure.md#identifier)
|
||||||
|
|
||||||
## 元组类型
|
## 元组类型 {#tuple-type-h}
|
||||||
*元组类型*是使用括号括起来的零个或多个类型,类型间用逗号隔开。
|
*元组类型*是使用括号括起来的零个或多个类型,类型间用逗号隔开。
|
||||||
|
|
||||||
你可以使用元组类型作为一个函数的返回类型,这样就可以使函数返回多个值。你也可以命名元组类型中的元素,然后用这些名字来引用每个元素的值。元素的名字由一个标识符紧跟一个冒号 `(:)` 组成。[函数和多返回值](../chapter2/06_Functions.md#functions_with_multiple_return_values) 章节里有一个展示上述特性的例子。
|
你可以使用元组类型作为一个函数的返回类型,这样就可以使函数返回多个值。你也可以命名元组类型中的元素,然后用这些名字来引用每个元素的值。元素的名字由一个标识符紧跟一个冒号 `(:)` 组成。[函数和多返回值](../chapter2/06_Functions.md#functions_with_multiple_return_values) 章节里有一个展示上述特性的例子。
|
||||||
@ -121,7 +121,7 @@ someTuple = (left: 5, right: 5) // 错误:命名类型不匹配
|
|||||||
> *元素名* → [*标识符*](./02_Lexical_Structure.md#identifier)
|
> *元素名* → [*标识符*](./02_Lexical_Structure.md#identifier)
|
||||||
>
|
>
|
||||||
|
|
||||||
## 函数类型
|
## 函数类型 {#function-type-h}
|
||||||
*函数类型*表示一个函数、方法或闭包的类型,它由参数类型和返回值类型组成,中间用箭头(`->`)隔开:
|
*函数类型*表示一个函数、方法或闭包的类型,它由参数类型和返回值类型组成,中间用箭头(`->`)隔开:
|
||||||
|
|
||||||
> (`参数类型`)->(`返回值类型`)
|
> (`参数类型`)->(`返回值类型`)
|
||||||
@ -218,7 +218,7 @@ func takesTwoFunctions(first: (Any) -> Void, second: (Any) -> Void) {
|
|||||||
> *参数标签* → [*标识符*](./02_Lexical_Structure.md#identifier)
|
> *参数标签* → [*标识符*](./02_Lexical_Structure.md#identifier)
|
||||||
>
|
>
|
||||||
|
|
||||||
## 数组类型
|
## 数组类型 {#array-type-h}
|
||||||
Swift 语言为标准库中定义的 `Array<Element>` 类型提供了如下语法糖:
|
Swift 语言为标准库中定义的 `Array<Element>` 类型提供了如下语法糖:
|
||||||
|
|
||||||
> [`类型`]
|
> [`类型`]
|
||||||
@ -250,7 +250,7 @@ var array3D: [[[Int]]] = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
|
|||||||
> *数组类型* → **[** [*类型*](#type) **]**
|
> *数组类型* → **[** [*类型*](#type) **]**
|
||||||
>
|
>
|
||||||
|
|
||||||
## 字典类型
|
## 字典类型 {#dictionary-type-h}
|
||||||
Swift 语言为标准库中定义的 `Dictionary<Key, Value>` 类型提供了如下语法糖:
|
Swift 语言为标准库中定义的 `Dictionary<Key, Value>` 类型提供了如下语法糖:
|
||||||
|
|
||||||
> [`键类型` : `值类型`]
|
> [`键类型` : `值类型`]
|
||||||
@ -278,7 +278,7 @@ let someDictionary: Dictionary<String, Int> = ["Alex": 31, "Paul": 39]
|
|||||||
> *字典类型* → **[** [*类型*](#type) **:** [*类型*](#type) **]**
|
> *字典类型* → **[** [*类型*](#type) **:** [*类型*](#type) **]**
|
||||||
>
|
>
|
||||||
|
|
||||||
## 可选类型
|
## 可选类型 {#optional-type-h}
|
||||||
Swift 定义后缀 `?` 来作为标准库中定义的命名型类型 `Optional<Wrapped>` 的语法糖。换句话说,下面两个声明是等价的:
|
Swift 定义后缀 `?` 来作为标准库中定义的命名型类型 `Optional<Wrapped>` 的语法糖。换句话说,下面两个声明是等价的:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
@ -310,7 +310,7 @@ optionalInteger! // 42
|
|||||||
> *可选类型* → [*类型*](#type) **?**
|
> *可选类型* → [*类型*](#type) **?**
|
||||||
>
|
>
|
||||||
|
|
||||||
## 隐式解析可选类型 {#implicitly-unwrapped-optional-type}
|
## 隐式解析可选类型 {#implicitly-unwrapped-optional-type-h}
|
||||||
当可以被访问时,Swift 语言定义后缀 `!` 作为标准库中命名类型 `Optional<Wrapped>` 的语法糖,来实现自动解包的功能。如果尝试对一个值为 `nil` 的可选类型进行隐式解包,将会产生运行时错误。因为隐式解包,下面两个声明等价:
|
当可以被访问时,Swift 语言定义后缀 `!` 作为标准库中命名类型 `Optional<Wrapped>` 的语法糖,来实现自动解包的功能。如果尝试对一个值为 `nil` 的可选类型进行隐式解包,将会产生运行时错误。因为隐式解包,下面两个声明等价:
|
||||||
|
|
||||||
```swift
|
```swift
|
||||||
@ -345,7 +345,7 @@ let implicitlyUnwrappedArray: [Int]! // 正确
|
|||||||
> *隐式解析可选类型* → [*类型*](#type) **!**
|
> *隐式解析可选类型* → [*类型*](#type) **!**
|
||||||
>
|
>
|
||||||
|
|
||||||
## 协议合成类型
|
## 协议合成类型 {#protocol-composition-type-h}
|
||||||
*协议合成类型*定义了一种遵循协议列表中每个指定协议的类型,或者一个现有类型的子类并遵循协议列表中每个指定协议。协议合成类型只能用在类型注解、泛型参数子句和泛型 `where` 子句中指定类型。
|
*协议合成类型*定义了一种遵循协议列表中每个指定协议的类型,或者一个现有类型的子类并遵循协议列表中每个指定协议。协议合成类型只能用在类型注解、泛型参数子句和泛型 `where` 子句中指定类型。
|
||||||
|
|
||||||
协议合成类型的形式如下:
|
协议合成类型的形式如下:
|
||||||
@ -377,7 +377,7 @@ typealias PQR = PQ & Q & R
|
|||||||
#### protocol-composition-continuation {#protocol-composition-continuation}
|
#### protocol-composition-continuation {#protocol-composition-continuation}
|
||||||
> *协议合成延续* → [*协议标识符*](#protocol-identifier) | [*协议合成类型*](#protocol-composition-type)
|
> *协议合成延续* → [*协议标识符*](#protocol-identifier) | [*协议合成类型*](#protocol-composition-type)
|
||||||
|
|
||||||
## 不透明类型
|
## 不透明类型 {#opaque-type-h}
|
||||||
|
|
||||||
*不透明类型*定义了遵循某个协议或者合成协议的类型,但不需要指明底层的具体类型。
|
*不透明类型*定义了遵循某个协议或者合成协议的类型,但不需要指明底层的具体类型。
|
||||||
|
|
||||||
@ -401,7 +401,7 @@ typealias PQR = PQ & Q & R
|
|||||||
|
|
||||||
> *不透明类型* → **some** [type](#type)
|
> *不透明类型* → **some** [type](#type)
|
||||||
|
|
||||||
## 元类型
|
## 元类型 {#metatype-type-h}
|
||||||
|
|
||||||
*元类型*是指任意类型的类型,包括类类型、结构体类型、枚举类型和协议类型。
|
*元类型*是指任意类型的类型,包括类类型、结构体类型、枚举类型和协议类型。
|
||||||
|
|
||||||
@ -451,7 +451,7 @@ let anotherInstance = metatype.init(string: "some string")
|
|||||||
#### metatype-type {#metatype-type}
|
#### metatype-type {#metatype-type}
|
||||||
> *元类型* → [*类型*](#type) **.** **Type** | [*类型*](#type) **.** **Protocol**
|
> *元类型* → [*类型*](#type) **.** **Type** | [*类型*](#type) **.** **Protocol**
|
||||||
|
|
||||||
## 自身类型
|
## 自身类型 {#self-type-h}
|
||||||
|
|
||||||
`Self` 类型不是具体的类型,而是让你更方便的引用当前类型,不需要重复或者知道该类的名字。
|
`Self` 类型不是具体的类型,而是让你更方便的引用当前类型,不需要重复或者知道该类的名字。
|
||||||
|
|
||||||
@ -489,7 +489,7 @@ print(type(of: z.f()))
|
|||||||
|
|
||||||
> *自身类型* → **Self**
|
> *自身类型* → **Self**
|
||||||
|
|
||||||
## 类型继承子句
|
## 类型继承子句 {#type-inheritance-clause-h}
|
||||||
|
|
||||||
*类型继承子句*被用来指定一个命名型类型继承自哪个类、采纳哪些协议。类型继承子句开始于冒号 `:`,其后是类型标识符列表。
|
*类型继承子句*被用来指定一个命名型类型继承自哪个类、采纳哪些协议。类型继承子句开始于冒号 `:`,其后是类型标识符列表。
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user