语法总结(Summary of the Grammar)

词法结构

空白字符语法

空白字符空白字符项 空白字符可选

空白字符项换行符

空白字符项注释

空白字符项多行注释

空白字符项 → U+0000,U+0009,U+000B,U+000C 或 U+0020

换行符* → U+000A

换行符 → U+000D

换行符 → U+000D 后面是 U+000A

注释// 单行内容注释 换行符

注释/* 多行内容注释 */

注释内容注释内容项 注释内容可选

注释内容项 → 除 U+000A 或 U+000D 外的任何 Unicode 标量值

多行注释内容多行注释内容项 多行注释内容可选

多行注释内容项多行内容

多行注释内容项注释内容项

多行注释内容项 → 除 /**/ 外的任何 Unicode 标量值

标识符语法

标识符标识符头(Head) 标识符字符集可选

标识符标识符头(Head) 标识符字符集可选

标识符隐式参数名

标识符集标识符 | 标识符 , 标识符集

标识符头(Head) → 大写或者小写字母 A 到 Z

标识符头(Head) → _

标识符头(Head) → U+00A8, U+00AA, U+00AD, U+00AF, U+00B2–U+00B5, or U+00B7–U+00BA

标识符头(Head) → U+00BC–U+00BE, U+00C0–U+00D6, U+00D8–U+00F6, or U+00F8–U+00FF

标识符头(Head) → U+0100–U+02FF, U+0370–U+167F, U+1681–U+180D, or U+180F–U+1DBF

标识符头(Head) → U+1E00–U+1FFF

标识符头(Head) → U+200B–U+200D, U+202A–U+202E, U+203F–U+2040, U+2054, or U+2060–U+206F

标识符头(Head) → U+2070–U+20CF, U+2100–U+218F, U+2460–U+24FF, or U+2776–U+2793

标识符头(Head) → U+2C00–U+2DFF or U+2E80–U+2FFF

标识符头(Head) → U+3004–U+3007, U+3021–U+302F, U+3031–U+303F, or U+3040–U+D7FF

标识符头(Head) → U+F900–U+FD3D, U+FD40–U+FDCF, U+FDF0–U+FE1F, or U+FE30–U+FE44

标识符头(Head) → U+FE47–U+FFFD

标识符头(Head) → U+10000–U+1FFFD, U+20000–U+2FFFD, U+30000–U+3FFFD, or U+40000–U+4FFFD

标识符头(Head) → U+50000–U+5FFFD, U+60000–U+6FFFD, U+70000–U+7FFFD, or U+80000–U+8FFFD

标识符头(Head) → U+90000–U+9FFFD, U+A0000–U+AFFFD, U+B0000–U+BFFFD, or U+C0000–U+CFFFD

标识符头(Head) → U+D0000–U+DFFFD or U+E0000–U+EFFFD

标识符字符 → 数值 0 到 9

标识符字符 → U+0300–U+036F, U+1DC0–U+1DFF, U+20D0–U+20FF, or U+FE20–U+FE2F

标识符字符标识符头(Head)

标识符字符集标识符字符 标识符字符集可选

隐式参数名$ 十进制数字集

字面量语法

字面量数值型字面量 | 字符串字面量 | 布尔字面量 | 空字面量

数值型字面量-可选整形字面量 | -可选浮点型字面量

布尔字面量true | false

空字面量nil

整型字面量语法

整型字面量二进制字面量

整型字面量八进制字面量

整型字面量十进制字面量

整型字面量十六进制字面量

二进制字面量0b 二进制数字 二进制字面量字符集可选

二进制数字 → 数值 0 到 1

二进制字面量字符二进制数字 | _

二进制字面量字符集二进制字面量字符 二进制字面量字符集可选

八进制字面量0o 八进制数字 八进制字符集可选

八进字数字 → 数值 0 到 7

八进制字符八进制数字 | _

八进制字符集八进制字符 八进制字符集可选

十进制字面量十进制数字 十进制字符集可选

十进制数字 → 数值 0 到 9

十进制数字集十进制数字 十进制数字集可选

十进制字面量字符十进制数字 | _

十进制字面量字符集十进制字面量字符 十进制字面量字符集可选

十六进制字面量0x 十六进制数字 十六进制字面量字符集可选

十六进制数字 → 数值 0 到 9,a 到 f,或者 A 到 F

十六进制字符十六进制数字 | _

十六进制字面量字符集十六进制字符 十六进制字面量字符集可选

浮点型字面量语法

浮点数字面量十进制字面量 十进制分数可选十进制指数可选

浮点数字面量十六进制字面量 十六进制分数可选十六进制指数

十进制分数. 十进制字面量

十进制指数浮点数 e 正负号可选十进制字面量

十六进制分数. 十六进制数

十六进制指数浮点数 p 正负号可选十六进制字面量

浮点数 ee | E

浮点数 pp | P

正负号+ | -

字符串型字面量语法

字符串字面量静态字符串字面量 | 插值字符串字面量

字符串开分隔定界符字符串扩展分隔符 "

字符串闭分隔定界符" 字符串扩展分隔符可选

静态字符串字面量字符串开分隔定界符 引用文本可选 字符串闭分隔定界符

静态字符串字面量多行字符串开分隔定界符 多行引用文本可选 多行字符串闭分隔定界符

多行字符串开分隔定界符字符串扩展分隔符 """

多行字符串闭分隔定界符""" 字符串扩展分隔符

字符串扩展分隔符# 字符串扩展分隔符可选

引用文本引用文本项 引用文本可选

引用文本项转义字符

引用文本项 → 除了 "、*\*、U+000A、U+000D 以外的所有 Unicode 字符

多行引用文本多行引用文本项 多行引用文本可选

多行引用文本项 转义字符可选

多行引用文本 → 除了 \ 以外的任何 Unicode 标量值

多行引用文本转义换行

插值字符串字面量字符串开分隔定界符 插值文本可选 字符串闭分隔定界符

插值字符串字面量多行字符串开分隔定界符 插值文本可选 多行字符串闭分隔定界符

插值文本插值文本项 插值文本可选

插值文本项\(表达式) | 引用文本项

多行插值文本多行插值文本项 多行插值文本可选

多行插值文本项\( 表达式 ) | 多行引用文本项

转义序列\ 字符串扩展分隔符

转义字符转义序列 0 | 转义序列 \ | 转义序列 t | 转义序列 n | 转义序列 r | 转义序列 \" | 转义序列 '

转义字符转义序列 u { unicode 标量数字 }

unicode 标量数字 → 一到八位的十六进制数字

转义换行符转义序列 空白可选 换行符

运算符语法语法

运算符运算符头 运算符字符集可选

运算符点运算符头 点运算符字符集可选

运算符字符/ | = | - | + | ! | * | % | < | > | & | | | ^ | ~ | ?

运算符头 → U+00A1–U+00A7

运算符头 → U+00A9 or U+00AB

运算符头 → U+00AC or U+00AE

运算符头 → U+00B0–U+00B1, U+00B6, U+00BB, U+00BF, U+00D7, or U+00F7

运算符头 → U+2016–U+2017 or U+2020–U+2027

运算符头 → U+2030–U+203E

运算符头 → U+2041–U+2053

运算符头 → U+2055–U+205E

运算符头 → U+2190–U+23FF

运算符头 → U+2500–U+2775

运算符头 → U+2794–U+2BFF

运算符头 → U+2E00–U+2E7F

运算符头 → U+3001–U+3003

运算符头 → U+3008–U+3030

运算符字符运算符头

运算符字符 → U+0300–U+036F

运算符字符 → U+1DC0–U+1DFF

运算符字符 → U+20D0–U+20FF

运算符字符 → U+FE00–U+FE0F

运算符字符 → U+FE20–U+FE2F

运算符字符 → U+E0100–U+E01EF

运算符字符集运算符字符 运算符字符集可选

点运算符头..

点运算符字符. | 运算符字符

点运算符字符集点运算符字符 点运算符字符集可选

二元运算符运算符

前置运算符运算符

后置运算符运算符

类型

类型语法

类型数组类型

类型字典类型

类型函数类型

类型类型标识符

类型元组类型

类型可选类型

类型隐式解析可选类型

类型协议合成类型

类型Any

类型Self

类型 type

类型注解语法

类型注解: 属性(Attributes)集可选类型

类型标识语法

类型标识类型名称 泛型参数从句可选| 类型名称 泛型参数从句可选. 类型标识符

类型名标识符

元组类型语法

元组类型( ) | ( 元组类型元素 , 元组类型元素列表 )

元组类型元素列表元组类型元素 | 元组类型元素 , 元组类型元素列表

元组类型元素元素名 类型注解 | 类型

元素名标识符

函数类型语法

函数类型类型 throws可选-> 类型

函数类型类型 rethrows -> 类型

函数类型子句( )

函数类型子句( 函数类型参数列表 ­可选 )

函数类型参数列表函数类型参数 | 函数类型参数函数类型参数列表

函数类型参数特性列表可选 输入输出参数可选 类型 | 参数标签 类型注解

参数标签标识符

数组类型语法

数组类型[ 类型 ]

字典类型语法

字典类型[ 类型 : 类型 ]

可选类型语法

可选类型类型 ?

隐式解析可选类型(Implicitly Unwrapped Optional Type)语法

隐式解析可选类型类型 !

协议合成类型语法

协议合成类型类型标识符 | 协议合成延续

协议持续延续类型标识符 | 协议合成类型

元(Metatype)类型语法

元类型类型 . Type | 类型 . Protocol

类型继承从句语法

类型继承从句: 类型继承集

类型继承集类型标识符 | 类型标识符 , 类型继承集

类条件class

表达式

表达式语法

表达式try 运算符可选 前缀表达式 二元表达式列表

表达式列表表达式|表达式, 表达式列表

前缀表达式语法

前缀表达式 → [前缀操作符]()可选 前缀表达式

前缀表达式输入输出表达式

输入输出表达式& 标识符

try 表达式语法

try 操作符try | **try ? ** | ** try ! **

二元表达式语法

二元表达式二元运算符 前缀表达式

二元表达式赋值操作符 try 运算符可选 前缀表达式

二元表达式条件运算符 try 运算符可选 前缀表达式

二元表达式类型转换运算符

二元表达式二元表达式 二元表达式列表可选

赋值操作符语法

赋值运算符 → [=]

条件运算符

条件运算符 → [?] 表达式:

类型转换运算符语法

类型转换运算符 → [is] 类型

类型转换运算符 → [as] 类型

类型转换运算符 → [as ?] 类型

类型转换运算符 → [as !] 类型

基础表达式语法

基础表达式标识符 泛型实参子句可选

基础表达式字面量表达式

基础表达式self 表达式

基础级表达式父类表达式

基础表达式闭包表达式

基础表达式圆括号表达式

基础表达式元组表达式

基础表达式隐式成员表达式

基础表达式通配符表达式

基础表达式key-path表达式

基础表达式选择器表达式

基础表达式key-path字符串表达式

字面量表达式语法

字面量表达式字面量

字面量表达式数组字面量 | 字典字面量 | 练习场字面量

字面量表达式#file | #line | #column | #function | dsohandle

数组字面量[ 数组字面量项列表可选 ]
数组字面量项列表数组字面量项可选 | 数组字面量项,数组字面量项列表
数组字面量项表达式

字典字面量 → [字典字面量项列表 ] | [ : ]

字典字面量项列表字典字面量项 ,**可选 | 字典字面量项 ,字典字面量项列表

字典字面量项表达式 : 表达式

palyground 字面量#colorLiteral ( red : 表达式 , green :表达式, blue :表达式 , alpha : 表达式 )

playground 字面量#fileLiteral ( resourceName : 表达式 )

playground 字面量 → **#imageLiteral ( resourceName : 表达式 )

self 表达式语法

self 表达式self | self 方法表达式self 下标表达式 | self 构造器表达式

self 方法表达式self . 标识符

self 下标表达式self [ 函数调用参数表 ]

self 构造器表达式self . init

父类表达式语法

父类表达式父类方法表达式 | 父类下标表达式 | 父类构造器表达式

父类方法表达式super . 标识符

父类下标表达式super [函数调用参数表 ]

父类构造器表达式super . init

闭包表达式语法

闭包表达式{ 闭包签名可选 语句 }

闭包签名* → 参数子句 函数结果可选 in

闭包签名标识符列表 函数结果可选 in

闭包参数子句 ( ) | ( 闭包参数列表 | 标识符列表 )

闭包参数列表 闭包参数 | 闭包参数, 闭包参数列表

闭包参数 闭包参数名 类型声明 可选

闭包参数 闭包参数名 类型声明

闭包参数名 标识符

捕获列表捕获列表 [ 捕获列表项列表 ]

捕获列表项列表捕获列表项 | 捕获列表项 , 捕获列表项列表

捕获列表项捕获说明符可选 表达式

捕获说明符weak | unowned | unowned(safe) | unowned(unsafe)

隐式成员表达式语法

隐式成员表达式. 标识符

圆括号表达式语法

圆括号表达式( 表达式 )

元组表达式语法

元组表达式( ) | (元组元素元组元素列表 )

元组元素列表元组元素 | 元组元素 , 元组元素列表
元组元素表达式 | 标识符 : 表达式

通配符表达式语法

通配符表达式_

key-path表达式语法

key-path 表达式 → ** 类型可选 *.* [多个 key-path 组件]
多个 key-path 组件key-path 组件 | key-path 组件 . 多个 key-path 组件
key-path 组件标识符 多个 key-path 后缀可选 | 多个 key-path 后缀
多个 key-path 后缀key-path 后缀 多个 key-path 后缀可选 key-path-postfixes {./04_Expressions.md#key-path-postfixes}

key-path 后缀? | ! | self | [ 函数调用参数表 ]

选择器表达式语法

选择器表达式#selector ( 表达式 )

选择器表达式#selector ( getter:表达式 )

选择器表达式#selector ( setter:表达式 )

key-path 字符串表达式语法
key-path 字符串表达式#keyPath ( 表达式 )

后缀表达式表达式语法

后缀表达式基本表达式

后缀表达式后缀表达式 后缀运算符

后缀表达式函数调用表达式

后缀表达式构造器表达式

后缀表达式显式成员表达式

后缀表达式后缀 self 表达式

后缀表达式下标表达式

后缀表达式强制取值表达式

后缀表达式可选链表达式

函数调用表达式语法

函数调用表达式后缀表达式 函数调用参数子句

函数调用表达式后缀表达式 函数调用参数子句可选 尾随闭包

函数调用参数子句( ) | ( 函数调用参数表 )

函数调用参数表函数调用参数 | 函数调用参数 , 函数调用参数表

函数调用参数表达式 | 标识符 : 表达式

函数调用参数运算符 | 标识符 : 运算符

尾随闭包闭包表达式

初始化表达式语法

构造器表达式后缀表达式 . init

构造器表达式后缀表达式 . init ( 参数名称 )

显式成员表达式语法

显式成员表达式后缀表达式 . 十进制数字

显式成员表达式后缀表达式 . 标识符 泛型实参子句可选

显式成员表达式后缀表达式 . 标识符 ( 参数名称 )

参数名称参数名 参数名称可选

参数名标识符 :

后缀 self 表达式语法

后缀 self 表达式后缀表达式 . self

下标表达式语法

下标表达式后缀表达式 [ 表达式列表 ]

强制取值表达式语法
强制取值表达式后缀表达式 !

可选链式表达式语法
可选链表达式后缀表达式 ?

语句

语句语法

语句表达式 ;可选

语句声明 ;可选

语句循环语句 ;可选

语句分支语句 ;可选

语句标签语句 ;可选

语句控制转移语句 ;可选

语句延迟语句 ;可选

语句执行语句 ;可选

语句编译控制语句

语句集语句 语句集可选

循环语句语法

循环语句for-in 语句

循环语句 → [while 语句](./05Statements#wheetatype 类型 ilestatement)

循环语句repeat-while 语句

For-In 循环语法

for-in 语句for case可选 模式 in 表达式 where 子句可选 代码块

While 循环语法

while 语句while 条件集 代码块

条件集条件 | 条件 , 条件集
条件表达式 | 可用性条件 | case 条件 | 可选绑定条件

case 条件case 模式 构造器

可选绑定条件let 模式 构造器 | var 模式 构造器

Repeat-While 语句语法

repeat-while-statementrepeat 代码块 while 表达式

分支语句语法

分支语句if 语句

分支语句guard 语句

分支语句switch 语句

If 语句语法

if 语句if 条件集 代码块 else 子句可选

else 子句else 代码块 | else if 语句

Guard 语句语法

guard 语句guard 条件集 else 代码块

Switch 语句语法

switch 语句switch 表达式 { switch-case集可选 }

switch-case集switch-case switch-case集可选

switch-casecase 标签 语句集

switch-casedefault 标签 语句集

switch-case条件 switch-case

case 标签特性可选 case case 项集 :

case 项集模式 where 子句可选 | 模式 where 子句可选 , case 项集

default 标签特性可选 default :

where 子句where where 表达式

where 表达式表达式

条件 switch-caseswitch if 指令子句 switch elseif 指令子句集可选 switch else 指令子句可选 endif 指令

switch if 指令子句if 指令 编译条件 switch-case集可选

switch elseif 指令子句集elseif 指令子句 switch elseif 指令子句集可选

switch elseif 指令子句elseif 指令 编译条件 switch-case集可选

switch else 指令子句else 指令 switch-case集可选

标签语句语法

标签语句语句标签 循环语句

标签语句语句标签 if 语句

标签语句语句标签 switch 语句

标签语句语句标签 do 语句

语句标签标签名称 :

标签名称标识符

控制转移语句语法

控制转移语句break 语句

控制转移语句continue 语句

控制转移语句fallthrough 语句

控制转移语句return 语句

控制转移语句throw 语句

Break 语句语法

break 语句break 标签名称可选

Continue 语句语法

continue 语句continue 标签名称可选

Fallthrough 语句语法

fallthrough 语句fallthrough

Return 语句语法

return 语句return 表达式可选

Throw 语句语法

throw 语句throw 表达式

Defer 语句语法

defer 语句defer 代码块

Do 语句语法

do 语句do 代码块 catch 子句集可选

catch 子句集catch 子句 catch 子句集可选

catch 子句catch 模式可选 where 子句可选 代码块可选

编译控制语句

编译控制语句条件编译块

编译控制语句行控制语句

编译控制语句诊断语句

条件编译块语法

条件编译块if 指令子句 elseif 指令子句集可选 else 指令子句可选 endif 指令

if 指令子句if 指令 编译条件 语句集可选

elseif 指令子句集elseif 指令子句 elseif 指令子句集可选

elseif 指令子句elseif 指令 编译条件 语句集可选

else 指令子句else 指令 语句集可选

if 指令#if

elseif 指令#elseif

else 指令#else

endif 指令#endif

编译条件平台条件

编译条件标识符

编译条件布尔字面量

编译条件( 编译条件 )

编译条件! 编译条件

编译条件编译条件 && 编译条件

编译条件编译条件 || 编译条件

平台条件os ( 操作系统 )

平台条件arch ( 架构 )

平台条件swift ( >= swift 版本 ) | swift ( < swift 版本 )

平台条件compiler ( >= swift 版本 ) | compiler ( < swift 版本 )

平台条件canImport ( 模块名 )

平台条件targetEnvironment ( 环境 )

操作系统macOS | iOS | watchOS | tvOS

架构i386 | x86_64 | arm | arm64

swift 版本十进制数字集 swift 版本后缀可选

swift 版本后缀. 十进制数字集 swift 版本集可选

模块名标识符

环境simulator

行控制语句语法

行控制语句#sourceLocation ( file: 文件名 , line: 行号 )

行控制语句#sourceLocation ( )

行号 → 一个大于 0 的十进制数字

文件名静态字符串字面量

编译期诊断语句语法

诊断语句#error ( 诊断信息 )

诊断语句#warning ( 诊断信息 )

诊断信息静态字符串字面量

可用性条件语法

可用性条件#available ( 可用性参数集 )

可用性参数集可用性参数 | 可用性参数 , 可用性参数集)

可用性参数平台名 平台版本

可用性参数*

平台名iOS | iOSApplicationExtension

平台名macOS | macOSApplicationExtension

平台名watchOS

平台名tvOS

平台版本十进制数字集

平台版本十进制数字集 . 十进制数字集

平台版本十进制数字集 . 十进制数字集 . 十进制数字集

声明

声明语法

声明导入声明

声明常量声明

声明变量声明

声明类型别名声明

声明函数声明

声明枚举声明

声明结构体声明

声明类声明

声明协议声明

声明构造器声明

声明析构器声明

声明扩展声明

声明下标声明

声明运算符声明

声明优先级组声明

声明集声明 声明集可选

顶级声明语法

顶级声明多条语句可选

代码块语法

代码块{ 多条语句可选 }

导入声明语法

导入声明特性可选 import 导入类型可选 导入路径

导入类型typealias | struct | class | enum | protocol | let | var | func

导入路径导入路径标识符 | 导入路径标识符 . 导入路径

导入路径标识符标识符 | 运算符

常数声明语法

常量声明特性可选 声明修饰符集可选 let 模式构造器集

模式构造器集模式构造器 | 模式构造器 , 模式构造器集

模式构造器模式 构造器可选

构造器= 表达式

变量声明语法

变量声明变量声明头 模式构造器集

变量声明变量声明头 变量名 类型注解 代码块

变量声明变量声明头 变量名 类型注解 getter-setter 块

变量声明变量声明头 变量名 类型注解 getter-setter 关键字块

变量声明变量声明头 变量名 构造器可选 willSet-didSet 代码块

变量声明变量声明头 变量名 类型注解 构造器可选 willSet-didSet 代码块

变量声明头特性可选 声明修饰符集可选 var

变量名称标识符

getter-setter 块代码块

getter-setter 块{ getter 子句 setter 子句可选 }

getter-setter 块{ setter 子句 getter 子句 }

getter 子句特性可选 可变性修饰符可选 get 代码块

setter 子句特性可选 可变性修饰符可选 set setter 名称可选 代码块

setter 名称( 标识符 )

getter-setter 关键字(Keyword)块{ getter 关键字子句 setter 关键字子句可选 }

getter-setter 关键字(Keyword)块{ setter 关键字子句 getter 关键字子句 }

getter 关键字(Keyword)子句特性可选 可变性修饰符可选 get

setter 关键字(Keyword)子句特性可选 可变性修饰符可选 set

willSet-didSet 代码块{ willSet 子句 didSet 子句可选 }

willSet-didSet 代码块{ didSet 子句 willSet 子句可选 }

willSet 子句特性可选 willSet setter 名称可选 代码块

didSet 子句特性可选

didSet setter 名称可选 代码块

类型别名声明语法

类型别名声明特性可选 访问级别修饰符 typealias 类型别名名称 泛型参数子句可选 类型别名赋值

类型别名名称标识符

类型别名赋值= 类型

函数声明语法

函数声明函数头 函数名 泛型参数子句可选 函数签名 泛型 where 子句可选 函数体可选

函数头特性可选 声明描述符集可选 func

函数名标识符 | 运算符

函数签名参数子句 throws可选 函数结果可选

函数签名参数子句 rethrows 函数结果可选

函数结果-> 特性可选 类型

函数体代码块

参数子句( ) | ( 参数集 )

参数集参数 | 参数 , 参数集

参数外部参数名可选 本地参数名 类型注解 默认参数子句可选

参数外部参数名可选 本地参数名 类型注解

参数外部参数名可选 本地参数名 类型注解

外部参数名标识符

本地参数名标识符

默认参数子句= 表达式

枚举声明语法

枚举声明特性可选 访问级别修饰符可选 联合式枚举

枚举声明特性可选 访问级别修饰符可选 原始值式枚举

联合式枚举indirect可选 enum 枚举名 泛型参数子句可选 类型继承子句可选 泛型 where 子句可选 { 联合式枚举成员可选 }

联合式枚举成员集联合式枚举成员 联合样式枚举成员集可选

联合样式枚举成员声明 | 联合式枚举 case 子句 | 编译控制语句

联合式枚举 case 子句特性可选 indirect可选 case 联合式枚举 case 集

联合式枚举 case 集联合式枚举 case | 联合式枚举 case , 联合式枚举 case 集

联合式枚举 case枚举的 case 名 元组类型可选

枚举名标识符

枚举的 case 名标识符

原始值式枚举enum 枚举名 泛型参数子句可选 类型继承子句 泛型 where 子句可选 { 原始值式枚举成员集 }

原始值式枚举成员集原始值式枚举成员 原始值式枚举成员集可选

原始值式枚举成员声明 | 原始值式枚举 case 子句 | 编译控制语句

原始值式枚举 case 子句特性可选 case 原始值式枚举 case 集

原始值式枚举 case 集原始值式枚举 case | 原始值式枚举 case , 原始值式枚举 case 集

原始值式枚举 case枚举的 case 名 原始值赋值可选

原始值赋值= 原始值字面量

原始值字面量(raw-value-literal)数值字面量 | 静态字符串字面量 | 布尔字面量

结构体声明语法

结构体声明特性可选 访问级别修饰符可选 struct 结构体名称 泛型参数子句可选 类型继承子句可选 泛型 where 子句可选 结构体主体

结构体名称标识符

结构体主体{ 结构体成员集可选 }

结构体成员集结构体成员 结构体成员集可选

结构体成员声明集 | 编译控制语句

类声明语法

类声明特性可选 访问级别修饰符可选 final可选 class 类名 泛型参数子句可选 类型继承子句 泛型 where 子句可选 类主体

类声明特性可选 final 访问级别修饰符可选 class 类名 泛型参数子句可选 类型继承子句 泛型 where 子句可选 类主体

类名标识符

类主体{ 类成员集可选 }

类成员集类成员 类成员集可选

类成员声明集 | 编译控制语句

协议声明语法

协议声明特性可选 访问级别修饰符可选 protocol 协议名 类型继承子句可选 泛型 where 子句可选 协议主体

协议名标识符

协议主体{ 协议成员集可选 }

协议成员集协议成员 协议成员集可选

协议成员协议成员声明 | 编译控制语句

协议成员声明协议属性声明

协议成员声明协议方法声明

协议成员声明协议构造器声明

协议成员声明协议下标声明

协议成员声明协议关联类型声明

协议成员声明类型别名声明

协议属性声明语法

协议属性声明变量声明头 变量名 类型注解 getter-setter 关键字块

协议方法声明语法

协议方法声明函数头 函数名 泛型参数子句可选 函数签名 泛型 where 子句可选

协议构造器声明语法

协议构造器声明构造器头 泛型参数子句可选 参数子句 throws可选 泛型 where 子句可选

协议构造器声明构造器头 泛型参数子句可选 参数子句 rethrows 泛型 where 子句可选

协议下标声明语法

协议下标声明下标头 下标结果 泛型 where 子句可选 getter-setter 关键字块

协议关联类型声明语法

协议关联类型声明特性可选 访问级别修饰符可选 associatedtype 类型别名 类型继承子句可选 类型别名赋值可选 泛型 where 子句可选

构造器声明语法

构造器声明构造器头 泛型参数子句可选 参数子句 throws可选 泛型 where 子句可选 构造器主体

构造器声明构造器头 泛型参数子句可选 参数子句 rethrows 泛型 where 子句可选 构造器主体

构造器头(Head)特性可选 声明修饰符集可选 init

构造器头(Head)特性可选 声明修饰符集可选 init ?

构造器头(Head)特性可选 声明修饰符集可选 init !

构造器主体代码块

析构器声明语法

析构器声明特性可选 deinit 代码块

扩展声明语法

扩展声明特性可选 访问级别修饰符可选 extension 类型标识 类型继承子句可选 泛型 where 子句可选 扩展主体

扩展主体{ 扩展成员集可选 }

扩展成员集扩展成员 扩展成员集可选

扩展成员声明集 | 编译控制语句

下标声明语法

下标声明下标头 下标结果 泛型 where 子句可选 代码块

下标声明下标头 下标结果 泛型 where 子句可选 getter-setter 块

下标声明下标头 下标结果 泛型 where 子句可选 getter-setter 关键字块

下标头(Head)特性可选 声明修饰符集可选 subscript 泛型参数子句可选 参数子句

下标结果(Result)-> 特性可选 类型

运算符声明语法

运算符声明前置运算符声明 | 后置运算符声明 | 中置运算符声明

前置运算符声明prefix operator 运算符

后置运算符声明postfix operator 运算符

中置运算符声明infix operator 运算符 中置运算符特性可选

中置运算符特性优先级组名

优先级组声明语法

优先级组声明precedencegroup 优先级组名 { 优先级组特性可选 }

优先级组特性优先级组属性 优先级组特性可选

优先级组属性优先级组关系

优先级组属性优先级组赋值

优先级组属性优先级组结合

优先级组关系higherThan : 优先级组名集

优先级组关系lowerThan : 优先级组名集

优先级组赋值assignment : 布尔字面量

优先级组结合associativity : left

优先级组结合associativity : right

优先级组结合associativity : none

优先级组名集优先级组名 | 优先级组名 , 优先级组名集

优先级组名标识符

声明修饰符语法

声明修饰符class | convenience | dynamic | final | infix | lazy | optional | override | postfix | prefix | required | static | unowned | unowned(safe) | unowned(unsafe) | weak

声明修饰符访问级别修饰符

声明修饰符可变性修饰符

声明修饰符集声明修饰符 声明修饰符集可选

访问级别修饰符private | private(set)

访问级别修饰符fileprivate | fileprivate(set)

访问级别修饰符internal | internal(set)

访问级别修饰符public | public(set)

访问级别修饰符open | open(set)

可变性修饰符mutating | nonmutating

属性

属性语法

属性@ 属性名 属性参数子句可选

属性名标识符

属性参数子句{ 平衡令牌集可选 }

属性(Attributes)集属性 特性可选

平衡令牌集平衡令牌 平衡令牌集可选

平衡令牌( 平衡令牌集可选 )

平衡令牌[ 平衡令牌集可选 ]

平衡令牌{ 平衡令牌集可选 }

平衡令牌 → 任意标识符、关键字、字面量或运算符

平衡令牌 → 除 ()[]{} 外的任意标点符号

模式

模式语法

模式通配符模式 类型注解可选

模式标识符模式 [类型注解](./03Types#typeannotati Value Bindingon )可选

模式值绑定模式

模式元组模式 类型注解可选

模式枚举 case 模式

模式可选模式

模式类型转换模式

模式表达式模式

通配符模式语法

通配符模式_

标识符模式语法

标识符模式标识符

值绑定模式语法

值绑定模式var 模式 | let 模式

元组模式语法

元组模式( 元组模式元素集可选 )

元组模式元素集元组模式元素 | 元组模式元素 , 元组模式元素集

元组模式元素模式 | 标识符 : 模式

枚举 case 模式语法

enum-case-pattern类型标识可选 . 枚举 case 名 元组模式可选

可选模式语法

可选模式标识符模式 ?

类型转换模式语法

类型转换模式is 模式 | as 模式

is 模式is 类型

as 模式模式 as 类型

表达式模式语法

表达式模式表达式

泛型参数

泛型形参子句语法

泛型参数子句< 泛型参数集 >

泛型参数集泛型参数 | 泛形参数 , 泛型参数集

泛形参数类型名称

泛形参数类型名称 : 类型标识

泛形参数类型名称 : 协议合成类型

泛型 where 子句where 约束集

约束集约束 | 约束 , 约束集

约束一致性约束 | 同类型约束

一致性约束类型标识 : 类型标识

一致性约束类型标识 : 协议合成类型

同类型约束类型标识 == 类型

泛型实参子句语法

泛型实参子句< 泛型实参集 >

泛型实参集泛型实参 | 泛形实参 , 泛型实参集

泛形实参类型