Links
Comment on page

语法总结

词法结构

空白字符语法
空白字符空白字符项 空白字符可选
空白字符项换行符
空白字符项内联空间
空白字符项注释
空白字符项多行注释
空白字符项 → 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) → 大写或者小写字母 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 标量值
多行引用文本转义换行
插值文本插值文本项 插值文本可选
插值文本项\(表达式) | 引用文本项
多行插值文本多行插值文本项 多行插值文本可选
多行插值文本项\( 表达式 ) | 多行引用文本项
转义序列\ 字符串扩展分隔符
转义字符转义序列 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
运算符字符集运算符字符 运算符字符集可选
点运算符头..
点运算符字符. | 运算符字符
点运算符字符集点运算符字符 点运算符字符集可选
二元运算符运算符
前置运算符运算符
后置运算符运算符

类型

类型语法
类型数组类型
类型字典类型
类型函数类型
类型类型标识符
类型元组类型
类型可选类型
类型协议合成类型
类型隐含类型
类型元类型
类型任意类型
类型自身类型
类型 type
类型注解语法
类型注解: 属性(Attributes)集可选类型
类型标识语法
类型名标识符
元组类型语法
元组类型( ) | ( 元组类型元素 , 元组类型元素列表 )
元组类型元素元素名 类型注解 | 类型
元素名标识符
函数类型语法
函数类型类型 函数类型子句 async可选 throws可选-> 类型
函数类型类型 rethrows -> 类型
函数类型子句( )
函数类型子句( 函数类型参数列表 *...*­可选 )
函数类型参数特性列表可选 输入输出参数可选 类型 | 参数标签 类型注解
参数标签标识符
数组类型语法
数组类型[ 类型 ]
字典类型语法
字典类型[ 类型 : 类型 ]
可选类型语法
可选类型类型 ?
隐式解析可选类型(Implicitly Unwrapped Optional Type)语法
隐式解析可选类型类型 !
协议合成类型语法
协议合成类型类型标识符 | 协议合成延续
协议持续延续类型标识符 | 协议合成类型
元(Metatype)类型语法
元类型类型 . Type | 类型 . Protocol
类型继承从句语法
类型继承从句: 类型继承集
类型继承集特性可选 类型标识符 | 特性可选 类型标识符 , 类型继承集
类条件class

表达式

表达式语法
表达式列表表达式|表达式, 表达式列表
前缀表达式语法
前缀表达式前缀操作符可选 前缀表达式
前缀表达式输入输出表达式
输入输出表达式& 标识符
try 表达式语法
try 操作符try | **try ? ** | ** try ! **
await 表达式语法
await 操作符await
中缀表达式语法
中缀表达式中缀运算符 前缀表达式
中缀表达式赋值操作符 try 运算符可选 前缀表达式
中缀表达式条件运算符 try 运算符可选 前缀表达式
中缀表达式类型转换运算符
中缀表达式中缀表达式 中缀表达式列表可选
赋值操作符语法
赋值运算符 → [=]
条件运算符
条件运算符 → [?] 表达式:
类型转换运算符语法
类型转换运算符 → [is] 类型
类型转换运算符 → [as] 类型
类型转换运算符 → [as ?] 类型
类型转换运算符 → [as !] 类型
基础表达式语法
基础表达式标识符 泛型实参子句可选
基础表达式字面量表达式
基础表达式self 表达式
基础级表达式父类表达式
基础表达式闭包表达式
基础表达式圆括号表达式
基础表达式元组表达式
基础表达式隐式成员表达式
基础表达式通配符表达式
基础表达式key-path表达式
基础表达式选择器表达式
基础表达式key-path 字符串表达式
字面量表达式语法
字面量表达式字面量
字面量表达式数组字面量 | 字典字面量 | 练习场字面量
字面量表达式#file | #filePath | #line | #column | #function | dsohandle
数组字面量[ 数组字面量项列表可选 ] 数组字面量项列表数组字面量项可选 | 数组字面量项,数组字面量项列表 数组字面量项表达式
字典字面量 → [字典字面量项列表 ] | [ : ]
字典字面量项列表字典字面量项 ,**可选 | 字典字面量项 ,字典字面量项列表
字典字面量项表达式 : 表达式
palyground 字面量#colorLiteral ( red : 表达式 , green :表达式, blue :表达式 , alpha : 表达式 )
playground 字面量#fileLiteral ( resourceName : 表达式 )
playground 字面量 → **#imageLiteral ( resourceName : 表达式 )
self 表达式语法
self 方法表达式self . 标识符
self 下标表达式self [ 函数调用参数表 ]
self 构造器表达式self . init
父类表达式语法
父类方法表达式super . 标识符
父类下标表达式super [函数调用参数表 ]
父类构造器表达式super . init
闭包表达式语法
闭包表达式{ 闭包签名可选 语句 }
闭包签名捕获列表 参数子句 async可选 throws可选 函数结果可选 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 语句](./05_Statements.md#wheetatype 类型 ile-statement)
循环语句repeat-while 语句
For-In 循环语法
for-in 语句for case可选 模式 in 表达式 where 子句可选 代码块
While 循环语法
while 语句while 条件集 代码块
条件集条件 | 条件 , 条件集
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 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 catch 模式列表可选 代码块可选
catch 模式列表catch 模式 | catch 模式catch 模式列表
catch 模式模式 where 子句可选
编译控制语句
编译控制语句条件编译块
编译控制语句行控制语句
编译控制语句诊断语句
条件编译块语法
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 版本集可选
模块名标识符
环境模拟器macCatalyst
行控制语句语法
行控制语句#sourceLocation ( file: 文件名 , line: 行号 )
行控制语句#sourceLocation ( )
行号 → 一个大于 0 的十进制数字
文件名静态字符串字面量
编译期诊断语句语法
诊断语句#error ( 诊断信息 )
诊断语句#warning ( 诊断信息 )
诊断信息静态字符串字面量
可用性条件语法
可用性条件#available ( 可用性参数集 )
可用性参数平台名 平台版本
可用性参数*
平台名iOS | iOSApplicationExtension
平台名macOS | macOSApplicationExtension
平台名watchOS
平台名tvOS
平台版本十进制数字集

声明

声明语法
声明导入声明
声明常量声明
声明变量声明
声明类型别名声明
声明函数声明
声明枚举声明
声明结构体声明
声明类声明
声明actor 声明
声明协议声明
声明构造器声明
声明析构器声明
声明扩展声明
声明下标声明
声明运算符声明
声明优先级组声明
声明集声明 声明集可选
顶级声明语法
顶级声明多条语句可选
代码块语法
代码块{ 多条语句可选 }
导入声明语法
导入声明特性可选 import 导入类型可选 导入路径
导入类型typealias | struct | class | enum | protocol | let | var | func
导入路径标识符标识符 | 运算符
常数声明语法
常量声明特性可选 声明修饰符集可选 let 模式构造器集
模式构造器集模式构造器 | 模式构造器 , 模式构造器集
模式构造器模式 构造器可选
构造器= 表达式