语法总结

最后更新于:2022-04-01 05:05:09

> 1.0 翻译:[stanzhai](https://github.com/stanzhai) 校对:[xielingwang](https://github.com/xielingwang) > > 2.0 翻译+校对:[miaosiqi](https://github.com/miaosiqi) 本页包含内容: [TOC=2] ## 语句 ### 语句语法 > 语句 → _表达式_ ; 可选 > 语句 → _声明_ ; 可选 > 语句 → _循环语句_ ; 可选 > 语句 → _分支语句_ ; 可选 > 语句 → _标记语句(Labeled Statement)_ > 语句 → _控制转移语句_ ; 可选 > 语句 → _延迟语句_ ; _可选_ > _语句_ → _执行语句_ ; _可选_ > _多条语句(Statements)_ → _语句_ _多条语句(Statements)_ _可选_ ### 循环语句语法 > 循环语句 → _for语句_ > 循环语句 → _for-in语句_ > 循环语句 → _while语句_ > 循环语句 → _repeat-while语句_ ### For 循环语法 > for语句 → for _for初始条件_ 可选 ; _表达式_ 可选 ; _表达式_ 可选 _代码块_ > for语句 → for ( _for初始条件_ 可选 ; _表达式_ 可选 ; _表达式_ 可选 ) _代码块_ > for初始条件 → _变量声明_ | _表达式集_ ### For-In 循环语法 > for-in语句 → for case 可选 _模式_ in _表达式_ _代码块_ _where从句_ _可选_ ### While 循环语法 > while语句 → while _条件从句_ _代码块_ > 条件从句 → _表达式_ > _条件从句_ → _表达式_ , _表达式集_ > _条件从句_ → _表达式集_ > _条件从句_ → _可用条件 (availability-condition_) | _表达式集_ > _条件集_ → _条件_ | _条件_ , _条件集_ > _条件_ → _可用条件(availability-condition)_ | _个例条件(case-condition)_ | _可选绑定条件(optional-binding-condition)_ > _个例条件(case-condition)_ → case _模式_ _构造器_ _where从句__可选_ > _可选绑定条件(optional-binding-condition)_ → _可选绑定头(optional-binding-head)_ _可选绑定连续集(optional-binding-continuation-list)_ 可选 _where从句_ _可选_ > _可选绑定头(optional-binding-head)_ → let _模式 构造器_ | var _模式 构造器_ > _可选绑定连续集(optional-binding-contiuation-list)_ → _可选绑定连续(optional-binding-contiuation)_ | _可选绑定连续(optional-binding-contiuation)_ , _可选绑定连续集(optional-binding-contiuation-list)_ > _可选绑定连续(optional-binding-continuation)_ → _模式 构造器_ | _可选绑定头(optional-binding-head)_ > Repeat-While语句语法 repeat-while-statement → repeat _代码块_ while _表达式_ ### 分支语句语法 > 分支语句 → _if语句_ > _分支语句_ → _guard语句_ > _分支语句_ → _switch语句_ ### If语句语法 > if语句 → if _条件从句_ _代码块_ _else从句(Clause)_ _可选_ > _else从句(Clause)_ → else _代码块_ | else _if语句_ ### Guard 语句语法 > guard语句 → guard _条件从句_ else _代码块_ ### Switch语句语法 > switch语句 → switch _表达式_ { _SwitchCase_ 可选 } > SwitchCase集 → _SwitchCase_ _SwitchCase集_ 可选 > SwitchCase → _case标签_ _多条语句(Statements)_ | _default标签_ _多条语句(Statements)_ > SwitchCase → _case标签_ ; | _default标签_ ; > case标签 → case _case项集_ : > case项集 → _模式_ _where-clause_ 可选 | _模式_ _where-clause_ 可选 , _case项集_ > default标签 → default : where从句 → where _where表达式_ where表达式 → _表达式_ ### 标记语句语法 > 标记语句(Labeled Statement) → _语句标签_ _循环语句_ | _语句标签_ _if语句_ | _语句标签_ _switch语句_ 语句标签 → _标签名称_ : > 标签名称 → _标识符_ ### 控制传递语句(Control Transfer Statement) 语法 > 控制传递语句 → _break语句_ > 控制传递语句 → _continue语句_ > 控制传递语句 → _fallthrough语句_ > 控制传递语句 → _return语句_ 控制传递语句 → _throw语句_ > Break 语句语法 > break语句 → break _标签名称_ _可选_ > Continue 语句语法 > continue语句 → continue _标签名称_ _可选_ ### Fallthrough 语句语法 > fallthrough语句 → fallthrough ### Return 语句语法 > return语句 → return _表达式_ _可选_ ### 可用条件(Availability Condition)语法 > _可用条件(availability-condition)_ → #available ( _多可用参数_(availability-arguments) ) > _多可用参数(availability- arguments)_ → _可用参数(availability-argument)_|_可用参数(availability-argument)_ , 多可用参数(availability-arguments) > _可用参数(availability- argument)_ → _平台名(platform-name)_ _平台版本(platform-version)_ > _可用参数(availability- argument)_ → * > _平台名_ → iOS | iOSApplicationExtension > _平台名_ → OSX | OSXApplicationExtension > _平台名_ → watchOS > _平台版本_ → _十进制数(decimal-digits)_ > _平台版本_ → _十进制数(decimal-digits)_ . _十进制数(decimal-digits)_ > _平台版本_ → _十进制数(decimal-digits)_ . _十进制数(decimal-digits)_ . _十进制数(decimal-digits)_) ### 抛出语句(Throw Statement)语法 > _抛出语句(throw-statement)_ → throw _表达式(expression)_ ### 延迟语句 (defer-statement)语法 > _延迟语句(defer-statement)_ → defer _代码块_ ### 执行语句(do-statement)语法 > _执行语句(do-statement)_ → do _代码块_ _catch-clauses_ _可选_ > _catch-clauses_ → _catch-clause_ _catch-clauses_ _可选_ > _catch-clauses_ → catch _模式(pattern)_ 可选 _where-clause_ 可选 _代码块(code-block)_ _可选_ ## 泛型参数 ### 泛型形参从句(Generic Parameter Clause) 语法 > 泛型参数从句 → _泛型参数集_ _约束从句_ 可选 > > 泛型参数集 → _泛形参数_ | _泛形参数_ , _泛型参数集_ > 泛形参数 → _类型名称_ > 泛形参数 → _类型名称_ : _类型标识_ > 泛形参数 → _类型名称_ : _协议合成类型_ > 约束从句 → where _约束集_ > 约束集 → _约束_ | _约束_ , _约束集_ > 约束 → _一致性约束_ | _同类型约束_ > 一致性约束 → _类型标识_ : _类型标识_ > 一致性约束 → _类型标识_ : _协议合成类型_ > 同类型约束 → _类型标识_ == _类型_ ### 泛型实参从句语法 > (泛型参数从句Generic Argument Clause) → _泛型参数集_ > > 泛型参数集 → _泛型参数_ | _泛型参数_ , _泛型参数集_ > 泛型参数 → _类型_ ## 声明 (Declarations) ### 声明语法 > 声明 → _导入声明_ > 声明 → _常量声明_ > 声明 → _变量声明_ > 声明 → _类型别名声明_ > 声明 → _函数声明_ > 声明 → _枚举声明_ > 声明 → _结构体声明_ > 声明 → _类声明_ > 声明 → _协议声明_ > 声明 → _构造器声明_ > 声明 → _析构器声明_ > 声明 → _扩展声明_ > 声明 → _下标脚本声明_ > 声明 → _运算符声明_ > 声明(Declarations)集 → _声明_ _声明(Declarations)集_ _可选_ ### 顶级(Top Level) 声明语法 > 顶级声明 → _多条语句(Statements)_ _可选_ ### 代码块语法 > 代码块 → { _多条语句(Statements)_ 可选 } ### 导入(Import)声明语法 > 导入声明 → _属性(Attributes)集_ 可选 import _导入类型_ 可选 _导入路径_ > 导入类型 → typealias | struct | class | enum | protocol | var | func > 导入路径 → _导入路径标识符_ | _导入路径标识符_ . _导入路径_ > 导入路径标识符 → _标识符_ | _运算符_ ### 常数声明语法 > 常量声明 → _属性(Attributes)集_ 可选 _声明修改符(Modifiers)集_ 可选 let _模式构造器集_ > 模式构造器集 → _模式构造器_ | _模式构造器_ , _模式构造器集_ > 模式构造器 → _模式_ _构造器_ 可选 > 构造器 → = _表达式_ ### 变量声明语法 > 变量声明 → _变量声明头(Head)_ _模式构造器集_ > 变量声明 → _变量声明头(Head)_ _变量名_ _类型注解_ _代码块_ > 变量声明 → _变量声明头(Head)_ _变量名_ _类型注解_ _getter-setter块_ > 变量声明 → _变量声明头(Head)_ _变量名_ _类型注解_ _getter-setter关键字(Keyword)块_ > 变量声明 → _变量声明头(Head)_ _变量名_ _类型注解_ _构造器_ 可选 _willSet-didSet代码块_ > 变量声明头(Head) → _属性(Attributes)集_ 可选 _声明修改符(Modifers)集_ 可选 var > 变量名称 → _标识符_ > getter-setter块 → { _getter从句_ _setter从句_ 可选 } > getter-setter块 → { _setter从句_ _getter从句_ } > getter从句 → _属性(Attributes)集_ 可选 get _代码块_ > setter从句 → _属性(Attributes)集_ 可选 set _setter名称_ 可选 _代码块_ > setter名称 → ( _标识符_ ) > getter-setter关键字(Keyword)块 → { _getter关键字(Keyword)从句_ _setter关键字(Keyword)从句_ 可选 } > getter-setter关键字(Keyword)块 → { _setter关键字(Keyword)从句_ _getter关键字(Keyword)从句_ } > getter关键字(Keyword)从句 → _属性(Attributes)集_ 可选 get > setter关键字(Keyword)从句 → _属性(Attributes)集_ 可选 set > willSet-didSet代码块 → { _willSet从句_ _didSet从句_ 可选 } > willSet-didSet代码块 → { _didSet从句_ _willSet从句_ } > willSet从句 → _属性(Attributes)集_ 可选 willSet _setter名称_ 可选 _代码块_ > didSet从句 → _属性(Attributes)集_ 可选 didSet _setter名称_ 可选 _代码块_ ### 类型别名声明语法 > 类型别名声明 → _类型别名头(Head)_ _类型别名赋值_ > 类型别名头(Head) → _属性_ 可选 _访问级别修改符(access-level-modifier)_ typealias _类型别名名称_ > 类型别名名称 → _标识符_ > 类型别名赋值 → = _类型_ ### 函数声明语法 > 函数声明 → _函数头_ _函数名_ _泛型参数从句_ 可选 _函数签名(Signature)_ _函数体_ > 函数头 → _属性(Attributes)集_ 可选 _声明描述符(Specifiers)集_ 可选 func > 函数名 → _标识符_ | _运算符_ > 函数签名(Signature) → _parameter-clauses_ throws 可选 _函数结果_ _可选_ > _函数签名(Signature)_ → _parameter-clauses_ rethrows _函数结果_ 可选 > 函数结果 → -> _属性(Attributes)集_ 可选 _类型_ > 函数体 → _代码块_ > 参数从句 → _参数从句_ _parameter-clauses_ 可选 > 参数从句 → ( ) | ( _参数集_ ... 可选 ) > 参数集 → _参数_ | _参数_ , _参数集_ > 参数 → inout 可选 let 可选 _外部参数名_ 可选 _本地参数名_ 可选 _类型注解_ _默认参数从句_ 可选 > 参数 → inout 可选 var _外部参数名_ _本地参数名_ 可选 _类型注解_ _默认参数从句_ 可选 > 参数 → _属性(Attributes)集_ 可选 _类型_ > 外部参数名 → _标识符_ | _ > 本地参数名 → _标识符_ | _ > 默认参数从句 → = _表达式_ ### 枚举声明语法 > 枚举声明 → _属性(Attributes)集_ 可选 _访问级别修改器(access-level-modifier)_ 可选 _联合式枚举_ > _枚举声明_ → _属性(Attributes)集_ 可选 _访问级别修改器(access-level-modifier)_ 可选 _原始值式枚举(raw-value-style-enum)_ > _联合式枚举_ → enum _枚举名_ _泛型参数从句_ 可选 _类型继承从句(type-inheritance-clause)_ 可选 { _联合样式枚举成员_ 可选 } > _联合样式枚举成员_ → _union-style-enum-member_ _联合样式枚举成员_ _可选_ > _联合样式枚举成员_ → _声明_ | _联合式(Union Style)的枚举case从句_ > _联合式(Union Style)的枚举case从句_ → _属性(Attributes)集_ 可选 case _联合式(Union Style)的枚举case集_ > 联合式(Union Style)的枚举case集 → _联合式(Union Style)的case_ | _联合式(Union Style)的case_ , _联合式(Union Style)的枚举case集_ > 联合式(Union Style)的枚举case → _枚举的case名_ _元组类型_ 可选 > 枚举名 → _标识符_ > 枚举的case名 → _标识符_ > 原始值式枚举 → enum _枚举名_ _泛型参数从句_ 可选 : _类型标识_ { _原始值式枚举成员集_ 可选 } > 原始值式枚举成员集 → _原始值式枚举成员_ _原始值式枚举成员集_ 可选 > 原始值式枚举成员 → _声明_ | _原始值式枚举case从句_ > 原始值式枚举case从句 → _属性(Attributes)集_ 可选 case _原始值式枚举case集_ > 原始值式枚举case集 → _原始值式枚举case_ | _原始值式枚举case_ , _原始值式枚举case集_ > 原始值式枚举case → _枚举的case名_ _原始值赋值_ 可选 > 原始值赋值 → = _字面量_ 原始值字面量(raw-value-literal) → _数值字面量_ | _字符串字面量_ | _布尔字面量_ ### 结构体声明语法 > 结构体声明 → _属性(Attributes)集_ 可选 _访问级别修改器(access-level-modifier)_ 可选 struct _结构体名称_ _泛型参数从句_ 可选 _类型继承从句_ 可选 _结构体主体_ > 结构体名称 → _标识符_ > 结构体主体 → { _声明(Declarations)集_ 可选 } ### 类声明语法 > 类声明 → _属性(Attributes)集_ 可选 _访问级别修改器(access-level-modifier)_ class _类名_ _泛型参数从句_ 可选 _类型继承从句_ 可选 _类主体_ > 类名 → _标识符_ > 类主体 → { _声明(Declarations)集_ 可选 } ### 协议(Protocol)声明语法 > 协议声明 → _属性(Attributes)集_ 可选__访问级别修改器(access-level-modifier)_ protocol _协议名_ _类型继承从句__可选 _协议主体_ > 协议名 → _标识符_ > 协议主体 → { _协议成员声明(Declarations)集_ 可选 } > 协议成员声明 → _协议属性声明_ > 协议成员声明 → _协议方法声明_ > 协议成员声明 → _协议构造器声明_ > 协议成员声明 → _协议下标脚本声明_ > 协议成员声明 → _协议关联类型声明_ > 协议成员声明(Declarations)集 → _协议成员声明_ _协议成员声明(Declarations)集_ _可选_ ### 协议属性声明语法 > 协议属性声明 → _变量声明头(Head)_ _变量名_ _类型注解_ _getter-setter关键字(Keyword)块_ ### 协议方法声明语法 > 协议方法声明 → _函数头_ _函数名_ _泛型参数从句_ 可选 _函数签名(Signature)_ ### 协议构造器声明语法 > 协议构造器声明 → _构造器头(Head)_ _泛型参数从句_ 可选 _参数从句_ ### 协议下标脚本声明语法 > 协议下标脚本声明 → _下标脚本头(Head)_ _下标脚本结果(Result)_ _getter-setter关键字(Keyword)块_ ### 协议关联类型声明语法 > 协议关联类型声明 → _类型别名头(Head)_ _类型继承从句_ 可选 _类型别名赋值_ _可选_ ### 构造器声明语法 > 构造器声明 → _构造器头(Head)_ _泛型参数从句_ 可选 _参数从句_ _构造器主体_ > 构造器头(Head) → _属性(Attributes)集_ 可选 _声明修改器集(declaration-modifiers)_ 可选 init > 构造器头(Head) → _属性(Attributes)集_ 可选 _声明修改器集(declaration-modifiers)_ 可选 init ? > _构造器头(Head)_ → _属性(Attributes)集_ 可选 _声明修改器集(declaration-modifiers)_ 可选 init ! > _构造器主体_ → _代码块_ ### 析构器声明语法 > 析构器声明 → _属性(Attributes)集_ 可选 deinit _代码块_ ### 扩展(Extension)声明语法 > 扩展声明 → _访问级别修改器_ 可选 extension _类型标识_ _类型继承从句_ 可选 _extension-body_ > extension-body → { _声明(Declarations)集_ 可选 } ### 下标脚本声明语法 > 下标脚本声明 → _下标脚本头(Head)_ _下标脚本结果(Result)_ _代码块_ > 下标脚本声明 → _下标脚本头(Head)_ _下标脚本结果(Result)_ _getter-setter块_ > 下标脚本声明 → _下标脚本头(Head)_ _下标脚本结果(Result)_ _getter-setter关键字(Keyword)块_ > 下标脚本头(Head) → _属性(Attributes)集_ 可选 _声明修改器(declaration-modifiers)_ 可选 subscript _参数从句_ > 下标脚本结果(Result) → -> _属性(Attributes)集_ 可选 _类型_ ### 运算符声明语法 > 运算符声明 → _前置运算符声明_ | _后置运算符声明_ | _中置运算符声明_ > 前置运算符声明 → prefix 运算符 _运算符_ { } > 后置运算符声明 → postfix 运算符 _运算符_ { } > 中置运算符声明 → infix 运算符 _运算符_ { _中置运算符属性集_ 可选 } > 中置运算符属性集 → _优先级从句_ 可选 _结和性从句_ 可选 > 优先级从句 → precedence _优先级水平_ > 优先级水平 → 数值 0 到 255,首末项包括在内 结和性从句 → associativity _结和性_ > 结和性 → left | right | none ### 声明修改器语法 > _声明修改器_ → 类 | 便捷(convenience) | 动态(dynamic) | final | 中置(infix) | lazy | 可变(mutating) | 不可变(nonmutating) | 可选(optional) | 改写(override) | 后置 | 前置 | required |static | unowned | unowned(safe) | unowned(unsafe) | 弱(weak) > _声明修改器_ → _访问级别声明器(access-level-modifier)_ > _声明修改集_ → _声明修改器_ _声明修改器集_ _可选_ > _访问级别修改器_ → 内部的 | 内部的(set) > _访问级别修改器_ → 私有的 | 私有的(set) > _访问级别修改器_ → 公共的 | 公共的(set) > _访问级别修改器集_ →_访问级别修改器_ _访问级别修改器集_ _可选_ ## 模式 ### 模式(Patterns) 语法 > 模式 → _通配符模式_ _类型注解_ 可选 > 模式 → _标识符模式_ _类型注解_ 可选 > 模式 → _值绑定模式_ > 模式 → _元组模式_ _类型注解_ _可选_ > _模式_ → _枚举个例模式_ > 模式 → _可选模式_ 模式 → _类型转换模式_ > 模式 → _表达式模式_ ### 通配符模式语法 > 通配符模式 → _ ### 标识符模式语法 > 标识符模式 → _标识符_ ### 值绑定(Value Binding)模式语法 > 值绑定模式 → var _模式_ | let _模式_ ### 元组模式语法 > 元组模式 → ( _元组模式元素集_ 可选 ) > 元组模式元素集 → _元组模式元素_ | _元组模式元素_ , _元组模式元素集_ > 元组模式元素 → _模式_ ### 枚举用例模式语法 > enum-case-pattern → _类型标识_ 可选 . _枚举的case名_ _元组模式_ _可选_ > 可选模式语法 可选模式 → _识别符模式_ ? ### 类型转换模式语法 > 类型转换模式(type-casting-pattern) → _is模式_ | _as模式_ > is模式 → is _类型_ > as模式 → _模式_ as _类型_ ### 表达式模式语法 > 表达式模式 → _表达式_ ## 属性 ### 属性语法 > 属性 → @ _属性名_ _属性参数从句_ 可选 > 属性名 → _标识符_ > 属性参数从句 → ( _平衡令牌集_ 可选 ) > 属性(Attributes)集 → _属性_ _属性(Attributes)集_ 可选 > 平衡令牌集 → _平衡令牌_ _平衡令牌集_ 可选 > 平衡令牌 → ( _平衡令牌集_ 可选 ) > 平衡令牌 → [ _平衡令牌集_ 可选 ] > 平衡令牌 → { _平衡令牌集_ 可选 } > 平衡令牌 → 任意标识符, 关键字, 字面量或运算符 > 平衡令牌 → 任意标点除了(, ), [, ], {, 或 } ## 表达式 ### 表达式语法 > 表达式 → _try-operator_ 可选 _前置表达式_ _二元表达式集_ 可选 > 表达式集 → _表达式_ | _表达式_ , _表达式集_ ### 前置表达式语法 > 前置表达式 → _前置运算符_ 可选 _后置表达式_ > 前置表达式 → _写入写出(in-out)表达式_ > 写入写出(in-out)表达式 → & _标识符_ > try表达式语法 try-operator → try | try ! ### 二元表达式语法 > 二元表达式 → _二元运算符_ _前置表达式_ > 二元表达式 → _赋值运算符_ _try运算符_ 可选 _前置表达式_ > 二元表达式 → _条件运算符_ _try运算符_ 可选 _前置表达式_ > 二元表达式 → _类型转换运算符_ > 二元表达式集 → _二元表达式_ _二元表达式集_ _可选_ ### 赋值运算符语法 > 赋值运算符 → = > 三元条件运算符语法 > 三元条件运算符 → ? _表达式_ : ### 类型转换运算符语法 > 类型转换运算符 → is _类型_ > _类型转换运算符_ → as _类型_ > _类型转换运算符_ → as ? _类型_ > _类型转换运算符_ → as ! _类型_ ### 主表达式语法 > 主表达式 → _标识符_ _泛型参数从句_ 可选 > 主表达式 → _字面量表达式_ > 主表达式 → _self表达式_ > 主表达式 → _超类表达式_ > 主表达式 → _闭包表达式_ > 主表达式 → _圆括号表达式_ > 主表达式 → _隐式成员表达式_ > 主表达式 → _通配符表达式_ ### 字面量表达式语法 > 字面量表达式 → _字面量_ > 字面量表达式 → _数组字面量_ | _字典字面量_ > 字面量表达式 → FILE | LINE | COLUMN | FUNCTION > 数组字面量 → [ _数组字面量项集_ 可选 ] > 数组字面量项集 → _数组字面量项_ , 可选 | _数组字面量项_ , _数组字面量项集_ > 数组字面量项 → _表达式_ > 字典字面量 → [ _字典字面量项集_ ] | [ : ] > 字典字面量项集 → _字典字面量项_ , 可选 | _字典字面量项_ , _字典字面量项集_ > 字典字面量项 → _表达式_ : _表达式_ ### Self 表达式语法 > self表达式 → self > self表达式 → self . _标识符_ > self表达式 → self [ _表达式_ ] > self表达式 → self . init ### 超类表达式语法 > 超类表达式 → _超类方法表达式_ | _超类下标表达式_ | _超类构造器表达式_ > 超类方法表达式 → super . _标识符_ > 超类下标表达式 → super [ _表达式_ ] > 超类构造器表达式 → super . init ### 闭包表达式语法 > 闭包表达式 → { _闭包签名(Signational)_ 可选 _多条语句(Statements)_ } > 闭包签名(Signational) → _参数从句_ _函数结果_ 可选 in > 闭包签名(Signational) → _标识符集_ _函数结果_ 可选 in > 闭包签名(Signational) → _捕获(Capature)集_ _参数从句_ _函数结果_ 可选 in > 闭包签名(Signational) → _捕获(Capature)集_ _标识符集_ _函数结果_ 可选 in > 闭包签名(Signational) → _捕获(Capature)集_ in > 捕获(Capature)集 → [ _捕获(Capature)说明符_ _表达式_ ] > 捕获(Capature)说明符 → weak | unowned | unowned(safe) | unowned(unsafe) ### 隐式成员表达式语法 > 隐式成员表达式 → . _标识符_ > 圆括号表达式(Parenthesized Expression)语法 > 圆括号表达式 → ( _表达式元素集_ 可选 ) > 表达式元素集 → _表达式元素_ | _表达式元素_ , _表达式元素集_ > 表达式元素 → _表达式_ | _标识符_ : _表达式_ ### 通配符表达式语法 > 通配符表达式 → _ > 后置表达式语法 > 后置表达式 → _主表达式_ > 后置表达式 → _后置表达式_ _后置运算符_ > 后置表达式 → _函数调用表达式_ > 后置表达式 → _构造器表达式_ > 后置表达式 → _显示成员表达式_ > 后置表达式 → _后置self表达式_ > 后置表达式 → _动态类型表达式_ > 后置表达式 → _下标表达式_ > 后置表达式 → _强制取值(Forced Value)表达式_ > 后置表达式 → _可选链(Optional Chaining)表达式_ ### 函数调用表达式语法 > 函数调用表达式 → _后置表达式_ _圆括号表达式_ > 函数调用表达式 → _后置表达式_ _圆括号表达式_ 可选 _后置闭包(Trailing Closure)_ > 后置闭包(Trailing Closure) → _闭包表达式_ ### 构造器表达式语法 > 构造器表达式 → _后置表达式_ . init ### 显式成员表达式语法 > 显示成员表达式 → _后置表达式_ . _十进制数字_ > 显示成员表达式 → _后置表达式_ . _标识符_ _泛型参数从句_ _可选_ ### 后置Self 表达式语法 > 后置self表达式 → _后置表达式_ . self ### 动态类型表达式语法 > 动态类型表达式 → _后置表达式_ . dynamicType ### 附属脚本表达式语法 > 附属脚本表达式 → _后置表达式_ [ _表达式集_ ] ### 强制取值(Forced Value)语法 > 强制取值(Forced Value)表达式 → _后置表达式_ ! ### 可选链表达式语法 > 可选链表达式 → _后置表达式_ ? ## 词法结构 ### 标识符语法 > 标识符 → _标识符头(Head)_ _标识符字符集_ 可选 > 标识符 → _标识符头(Head)_ _标识符字符集_ 可选 > 标识符 → _隐式参数名_ > 标识符集 → _标识符_ | _标识符_ , _标识符集_ > 标识符头(Head) → Upper- or lowercase letter A through 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 through f, or A through F > 十六进制字符 → _十六进制数字_ | _ > 十六进制字面量字符集 → _十六进制字符_ _十六进制字面量字符集_ _可选_ ### 浮点型字面量语法 > 浮点数字面量 → _十进制字面量_ _十进制分数_ 可选 _十进制指数_ 可选 > 浮点数字面量 → _十六进制字面量_ _十六进制分数_ 可选 _十六进制指数_ > 十进制分数 → . _十进制字面量_ > 十进制指数 → _浮点数e_ _正负号_ 可选 _十进制字面量_ > 十六进制分数 → . _十六进制数_ > _十六进制字面量字符集__可选_ > 十六进制指数 → _浮点数p_ _正负号_ 可选 _十六进制字面量_ > 浮点数e → e | E > 浮点数p → p | P > 正负号 → + | - ### 字符串型字面量语法 > 字符串字面量 → " _引用文本_ " > 引用文本 → _引用文本条目_ _引用文本_ 可选 > 引用文本条目 → _转义字符_ > 引用文本条目 → ( _表达式_ ) > 引用文本条目 → 除了"­, \­, U+000A, or U+000D的所有Unicode的字符 > 转义字符 → /0 | \ | \t | \n | \r | \" | \' > 转义字符 → \u { _十六进制标量数字集_ } > unicode标量数字集 → Between one and eight hexadecimal digits ### 运算符语法语法 > 运算符 → _运算符头_ _运算符字符集_ 可选 运算符 → _点运算符头_ _点运算符字符集_ 可选 > 运算符字符 → / | = | - | + | ! | * | % | | > | & | | | ^ | ~ | ? > 运算符头 → 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 > _运算符字符集_ → _运算符字符_ _运算符字符集__可选_ > _点运算符头_ → .. > _点运算符字符_ → . | _运算符字符_ > _点运算符字符集_ → _点运算符字符_ _点运算符字符集_ _可选_ > _二元运算符_ → _运算符_ > 前置运算符 → _运算符_ > 后置运算符 → _运算符_ ## 类型 ### 类型语法 > 类型 → _数组类型_ | _字典类型_ | _函数类型_ | _类型标识符_ | _元组类型_ | _可选类型_ | _隐式解析可选类型_ | _协议合成类型_ | _元型类型_ ### 类型注解语法 > 类型注解 → : _属性(Attributes)集_ 可选 _类型_ ### 类型标识语法 > 类型标识 → _类型名称_ _泛型参数从句_ 可选 | _类型名称_ _泛型参数从句_ 可选 . _类型标识符_ > 类型名 → _标识符_ ### 元组类型语法 > 元组类型 → ( _元组类型主体_ 可选 ) > 元组类型主体 → _元组类型的元素集_ ... 可选 > 元组类型的元素集 → _元组类型的元素_ | _元组类型的元素_ , _元组类型的元素集_ > 元组类型的元素 → _属性(Attributes)集_ 可选 inout 可选 _类型_ | inout 可选 _元素名_ _类型注解_ > 元素名 → _标识符_ ### 函数类型语法 > 函数类型 → _类型_ throws 可选 -> _类型_ > 函数类型 → _类型_ rethrows -> _类型_ ### 数组类型语法 > 数组类型 → [ _类型_ ] ### 字典类型语法 > 字典类型 → [ _类型 : 类型_ ] ### 可选类型语法 > 可选类型 → _类型_ ? > 隐式解析可选类型(Implicitly Unwrapped Optional Type)语法 > 隐式解析可选类型 → _类型_ ! ### 协议合成类型语法 > 协议合成类型 → protocol _协议标识符集_ 可选 > > 协议标识符集 → _协议标识符_ | _协议标识符_ , _协议标识符集_ > 协议标识符 → _类型标识符_ ### 元(Metatype)类型语法 > 元类型 → _类型_ . Type | _类型_ . Protocol ### 类型继承从句语法 > _类型继承从句_ → : _类条件(class-requirement))_ , _类型继承集_ > _类型继承从句_ → : _类条件(class-requirement))_ > _类型继承从句_ → : _类型继承集_ > _类型继承集_ → _类型标识符_ | _类型标识符_ , _类型继承集_ > _类条件_ → class
';