# 語法總結(Summary of the Grammar)
## 詞法結構 {#lexical-structure}
> 空白字符語法
>
> *空白字符* → [空白字符項](./02_Lexical_Structure.md#whitespace-item) [空白字符](./02_Lexical_Structure.md#whitespace)<sub>可選</sub>
>
> *空白字符項* → [換行符](./02_Lexical_Structure.md#line-break)
>
> *空白字符項* → [注釋](./02_Lexical_Structure.md#comment)
>
> *空白字符項* → [多行注釋](./02_Lexical_Structure.md#multiline-comment)
>
> *空白字符項* → U+0000,U+0009,U+000B,U+000C 或 U+0020
>
>
>
> 換行符* → U+000A
>
> *換行符* → U+000D
>
> *換行符* → U+000D 后面是 U+000A
>
>
>
> *注釋* → **//** [單行內容注釋](./02_Lexical_Structure.md#comment-text) [換行符](./02_Lexical_Structure.md#line-break)
>
> *注釋* → **/\*** [多行內容注釋](./02_Lexical_Structure.md#multiline-comment-text) **\*/**
>
>
>
> *注釋內容* → [注釋內容項](./02_Lexical_Structure.md#comment-text-item) [注釋內容](./02_Lexical_Structure.md#comment-text)<sub>可選</sub>
>
> *注釋內容項* → 除 U+000A 或 U+000D 外的任何 Unicode 標量值
>
>
>
> *多行注釋內容* → [多行注釋內容項](./02_Lexical_Structure.md#multiline-comment-text-item) [多行注釋內容](./02_Lexical_Structure.md#multiline-comment-text)<sub>可選</sub>
>
> *多行注釋內容項* → [多行內容](./02_Lexical_Structure.md#multiline-comment)
>
> *多行注釋內容項* → [注釋內容項](./02_Lexical_Structure.md#comment-text-item)
>
> *多行注釋內容項* → 除 **/\*** 或 **\*/** 外的任何 Unicode 標量值
>
<!-- -->
> 標識符語法
>
> *標識符* → [標識符頭(Head)](./02_Lexical_Structure.md#identifier-head) [標識符字符集](./02_Lexical_Structure.md#identifier-characters)<sub>可選</sub>
>
> *標識符* → [標識符頭(Head)](./02_Lexical_Structure.md#identifier-head) [標識符字符集](./02_Lexical_Structure.md#identifier-characters)<sub>可選</sub>
>
> *標識符* → [隱式參數名](./02_Lexical_Structure.md#implicit-parameter-name)
>
> *標識符* → [屬性包裝器呈現值](./02_Lexical_Structure.md#property-wrapper-projection)
>
> *標識符集* → [標識符](./02_Lexical_Structure.md#identifier) | [標識符](./02_Lexical_Structure.md#identifier) **,** [標識符集](./02_Lexical_Structure.md#identifier-list)
>
> *標識符頭(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)](./02_Lexical_Structure.md#identifier-head)
>
> *標識符字符集* → [標識符字符](./02_Lexical_Structure.md#identifier-character) [標識符字符集](./02_Lexical_Structure.md#identifier-characters)<sub>可選</sub>
>
> *隱式參數名* → **$** [十進制數字集](./02_Lexical_Structure.md#decimal-digits)
>
> *屬性包裝器呈現值* → **$** [標識符字符集](./02_Lexical_Structure.md#identifier-characters)
>
<!-- -->
> 字面量語法
>
> *字面量* → [數值型字面量](./02_Lexical_Structure.md#numeric-literal) | [字符串字面量](./02_Lexical_Structure.md#string-literal) | [布爾字面量](./02_Lexical_Structure.md#boolean-literal) | [空字面量](./02_Lexical_Structure.md#nil-literal)
>
> *數值型字面量* → **-**<sub>可選</sub>[整形字面量](./02_Lexical_Structure.md#integer-literal) | **-**<sub>可選</sub>[浮點型字面量](./02_Lexical_Structure.md#floating-point-literal)
>
> *布爾字面量* → **true** | **false**
>
> *空字面量* → **nil**
>
<!-- -->
> 整型字面量語法
>
> *整型字面量* → [二進制字面量](./02_Lexical_Structure.md#binary-literal)
>
> *整型字面量* → [八進制字面量](./02_Lexical_Structure.md#octal-literal)
>
> *整型字面量* → [十進制字面量](./02_Lexical_Structure.md#decimal-literal)
>
> *整型字面量* → [十六進制字面量](./02_Lexical_Structure.md#hexadecimal-literal)
>
> *二進制字面量* → **0b** [二進制數字](./02_Lexical_Structure.md#binary-digit) [二進制字面量字符集](./02_Lexical_Structure.md#binary-literal-characters)<sub>可選</sub>
>
> *二進制數字* → 數值 0 到 1
>
> *二進制字面量字符* → [二進制數字](./02_Lexical_Structure.md#binary-digit) | **-**
>
> *二進制字面量字符集* → [二進制字面量字符](./02_Lexical_Structure.md#binary-literal-character) [二進制字面量字符集](./02_Lexical_Structure.md#binary-literal-characters)<sub>可選</sub>
>
> *八進制字面量* → **0o** [八進制數字](./02_Lexical_Structure.md#octal-digit) [八進制字符集](./02_Lexical_Structure.md#octal-literal-characters)<sub>可選</sub>
>
> *八進字數字* → 數值 0 到 7
>
> *八進制字符* → [八進制數字](./02_Lexical_Structure.md#octal-digit) | **-**
>
> *八進制字符集* → [八進制字符](./02_Lexical_Structure.md#octal-literal-character) [八進制字符集](./02_Lexical_Structure.md#octal-literal-characters)<sub>可選</sub>
>
> *十進制字面量* → [十進制數字](./02_Lexical_Structure.md#decimal-digit) [十進制字符集](./02_Lexical_Structure.md#decimal-literal-characters)<sub>可選</sub>
>
> *十進制數字* → 數值 0 到 9
>
> *十進制數字集* → [十進制數字](./02_Lexical_Structure.md#decimal-digit) [十進制數字集](./02_Lexical_Structure.md#decimal-digits)<sub>可選</sub>
>
> *十進制字面量字符* → [十進制數字](./02_Lexical_Structure.md#decimal-digit) | **-**
>
> *十進制字面量字符集* → [十進制字面量字符](./02_Lexical_Structure.md#decimal-literal-character) [十進制字面量字符集](./02_Lexical_Structure.md#decimal-literal-characters)<sub>可選</sub>
>
> *十六進制字面量* → **0x** [十六進制數字](./02_Lexical_Structure.md#hexadecimal-digit) [十六進制字面量字符集](./02_Lexical_Structure.md#hexadecimal-literal-characters)<sub>可選</sub>
>
> *十六進制數字* → 數值 0 到 9,a 到 f,或者 A 到 F
>
> *十六進制字符* → [十六進制數字](./02_Lexical_Structure.md#hexadecimal-digit) | **-**
>
> *十六進制字面量字符集* → [十六進制字符](./02_Lexical_Structure.md#hexadecimal-literal-character) [十六進制字面量字符集](./02_Lexical_Structure.md#hexadecimal-literal-characters)<sub>可選</sub>
>
<!-- -->
> 浮點型字面量語法
>
> *浮點數字面量* → [十進制字面量](./02_Lexical_Structure.md#decimal-literal) [十進制分數](./02_Lexical_Structure.md#decimal-fraction)<sub>可選</sub>[十進制指數](./02_Lexical_Structure.md#decimal-exponent)<sub>可選</sub>
>
> *浮點數字面量* → [十六進制字面量](./02_Lexical_Structure.md#hexadecimal-literal) [十六進制分數](./02_Lexical_Structure.md#hexadecimal-fraction)<sub>可選</sub>[十六進制指數](./02_Lexical_Structure.md#hexadecimal-exponent)
>
> *十進制分數* → **.** [十進制字面量](./02_Lexical_Structure.md#decimal-literal)
>
> *十進制指數* → [浮點數 e](./02_Lexical_Structure.md#floating-point-e) [正負號](./02_Lexical_Structure.md#sign)<sub>可選</sub>[十進制字面量](./02_Lexical_Structure.md#decimal-literal)
>
> *十六進制分數* → **.** [十六進制數](./02_Lexical_Structure.md#hexadecimal-literal)
>
> *十六進制指數* → [浮點數 p](./02_Lexical_Structure.md#floating-point-p) [正負號](./02_Lexical_Structure.md#sign)<sub>可選</sub>[十六進制字面量](./02_Lexical_Structure.md#hexadecimal-literal)
>
> *浮點數 e* → **e** | **E**
>
> *浮點數 p* → **p** | **P**
>
> *正負號* → **+** | **-**
>
<!-- -->
> 字符串型字面量語法
> *字符串字面量* → [靜態字符串字面量](./02_Lexical_Structure.md#static-string-literal) | [插值字符串字面量](./02_Lexical_Structure.md#interpolated-string-literal)
>
> *字符串開分隔定界符* → [字符串擴展分隔符](./02_Lexical_Structure.md#extended-string-literal-delimiter) **"**
>
> *字符串閉分隔定界符* → **"** [字符串擴展分隔符](./02_Lexical_Structure.md#extended-string-literal-delimiter)<sub>可選</sub>
>
> *靜態字符串字面量* → [字符串開分隔定界符](./02_Lexical_Structure.md#extended-string-literal-delimiter) [引用文本](./02_Lexical_Structure.md#quoted-text)<sub>可選</sub> [字符串閉分隔定界符](./02_Lexical_Structure.md#extended-string-literal-delimiter)
>
> *靜態字符串字面量* → [多行字符串開分隔定界符](./02_Lexical_Structure.md#extended-string-literal-delimiter) [多行引用文本](./02_Lexical_Structure.md#multiline-quoted-text)<sub>可選</sub> [多行字符串閉分隔定界符](./02_Lexical_Structure.md#extended-string-literal-delimiter)
>
> *多行字符串開分隔定界符* → [字符串擴展分隔符](./02_Lexical_Structure.md#extended-string-literal-delimiter) **"""**
>
> *多行字符串閉分隔定界符* → **"""** [字符串擴展分隔符](./02_Lexical_Structure.md#extended-string-literal-delimiter)
>
> *字符串擴展分隔符* → **#** [字符串擴展分隔符](./02_Lexical_Structure.md#extended-string-literal-delimiter)<sub>可選</sub>
>
> *引用文本* → [引用文本項](./02_Lexical_Structure.md#quoted-text-item) [引用文本](#quoted-text)<sub>可選</sub>
>
> *引用文本項* → [轉義字符](./02_Lexical_Structure.md#escaped-character)
>
> *引用文本項* → 除了 **"**、**\\\**、U+000A、U+000D 以外的所有 Unicode 字符
>
> *多行引用文本* → [多行引用文本項](./02_Lexical_Structure.md#multiline-quoted-text-item) [多行引用文本](./02_Lexical_Structure.md#multiline-quoted-text)<sub>可選</sub>
>
> *多行引用文本項* [轉義字符](./02_Lexical_Structure.md#escaped-character)<sub>可選</sub>
>
> *多行引用文本* → 除了 **\\** 以外的任何 Unicode 標量值
>
> *多行引用文本* → [轉義換行](./02_Lexical_Structure.md#escaped-newline)
> *插值字符串字面量* → [字符串開分隔定界符](./02_Lexical_Structure.md#extended-string-literal-delimiter) [插值文本](./02_Lexical_Structure.md#interpolated-text)<sub>可選</sub> [字符串閉分隔定界符](./02_Lexical_Structure.md#extended-string-literal-delimiter)
>
> *插值字符串字面量* → [多行字符串開分隔定界符](./02_Lexical_Structure.md#extended-string-literal-delimiter) [插值文本](./02_Lexical_Structure.md#interpolated-text)<sub>可選</sub> [多行字符串閉分隔定界符](./02_Lexical_Structure.md#extended-string-literal-delimiter)
>
> *插值文本* → [插值文本項](./02_Lexical_Structure.md#interpolated-text-item) [插值文本](./02_Lexical_Structure.md#interpolated-text)<sub>可選</sub>
>
> *插值文本項* → **\\**(**[表達式](./04_Expressions.md)**) | [引用文本項](./02_Lexical_Structure.md#quoted-text-item)
>
> *多行插值文本* → [多行插值文本項](./02_Lexical_Structure.md#multiline-quoted-text-item) [多行插值文本](./02_Lexical_Structure.md#multiline-quoted-text)<sub>可選</sub>
>
> *多行插值文本項* → **\\(** [表達式](./04_Expressions.md) **)** | [多行引用文本項](./02_Lexical_Structure.md#multiline-quoted-text-item)
>
> *轉義序列* → **\\** [字符串擴展分隔符](./02_Lexical_Structure.md#extended-string-literal-delimiter)
>
> *轉義字符* → [轉義序列](./02_Lexical_Structure.md#escape-sequence) **0** | [轉義序列](./02_Lexical_Structure.md#escape-sequence) **\\** | [轉義序列](./02_Lexical_Structure.md#escape-sequence) **t** | [轉義序列](#escape-sequence) **n** | [轉義序列](./02_Lexical_Structure.md#escape-sequence) **r** | [轉義序列](./02_Lexical_Structure.md#escape-sequence) **\"** | [轉義序列](./02_Lexical_Structure.md#escape-sequence) **'**
>
> *轉義字符* → [轉義序列](./02_Lexical_Structure.md#escape-sequence) **u {** [unicode 標量數字](./02_Lexical_Structure.md#unicode-scalar-digits) **}**
>
> *unicode 標量數字* → 一到八位的十六進制數字
>
> *轉義換行符* → [轉義序列](./02_Lexical_Structure.md#escape-sequence) [空白](./02_Lexical_Structure.md#whitespace)<sub>可選</sub> [換行符](./02_Lexical_Structure.md#line-break)
<!-- -->
> 運算符語法語法
>
> *運算符* → [運算符頭](./02_Lexical_Structure.md#operator-character) [運算符字符集](./02_Lexical_Structure.md#operator)<sub>可選</sub>
>
> *運算符* → [點運算符頭](./02_Lexical_Structure.md#dot-operator-head) [點運算符字符集](./02_Lexical_Structure.md#dot-operator-characters)<sub>可選</sub>
>
> *運算符字符* → **/** | **=** | **-** | **+** | **!** | ***** | **%** | **<** | **>** | **&** | **|** | **^** | **~** | **?**
>
> *運算符頭* → 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
>
> *運算符字符* → [運算符頭](./02_Lexical_Structure.md#operator-head)
>
> *運算符字符* → U+0300–U+036F
>
> *運算符字符* → U+1DC0–U+1DFF
>
> *運算符字符* → U+20D0–U+20FF
>
> *運算符字符* → U+FE00–U+FE0F
>
> *運算符字符* → U+FE20–U+FE2F
>
> *運算符字符* → U+E0100–U+E01EF
>
> *運算符字符集* → [運算符字符](./02_Lexical_Structure.md#operator-character) [運算符字符集](./02_Lexical_Structure.md#operator-characters)<sub>可選</sub>
>
> *點運算符頭* → **..**
>
> *點運算符字符* → **.** | [運算符字符](./02_Lexical_Structure.md#operator-character)
>
> *點運算符字符集* → [點運算符字符](./02_Lexical_Structure.md#dot-operator-character) [點運算符字符集](./02_Lexical_Structure.md#dot-operator-characters)<sub>可選</sub>
>
> *二元運算符* → [運算符](./02_Lexical_Structure.md#operator)
>
> *前置運算符* → [運算符](./02_Lexical_Structure.md#operator)
>
> *后置運算符* → [運算符](./02_Lexical_Structure.md#operator)
>
## 類型 {#types}
> 類型語法
>
> *類型* → [數組類型](./03_Types.md#array-type)
>
> *類型* → [字典類型](./03_Types.md#dictionary-type)
>
> *類型* → [函數類型](./03_Types.md#function-type)
>
> *類型* → [類型標識符](./03_Types.md#type-identifier)
>
> *類型* → [元組類型](./03_Types.md./03_Types.md#tuple-type)
>
> *類型* → [可選類型](./03_Types.md#optional-type)
>
> *類型* → [隱式解析可選類型](./03_Types.md#implicitly-unwrapped-optional-type)
>
> *類型* → [協議合成類型](./03_Types.md#protocol-composition-type)
>
> *類型* → **Any**
>
> *類型* → **Self**
>
> *類型* → **(** [type](./03_Types.md#metatype-type) **)**
<!-- -->
> 類型注解語法
>
> *類型注解* → **:** [屬性(Attributes)集](./07_Attributes.md#attributes)<sub>可選</sub>[類型](./03_Types.md#type)
<!-- -->
> 類型標識語法
>
> *類型標識* → [類型名稱](./03_Types.md#type-name) [泛型參數從句](./09_Generic_Parameters_and_Arguments.md#generic-argument-clause)<sub>可選</sub>| [類型名稱](./03_Types.md#type-name) [泛型參數從句](./09_Generic_Parameters_and_Arguments.md#generic-argument-clause)<sub>可選</sub>**.** [類型標識符](./03_Types.md#type-identifier)
>
> *類型名* → [標識符](./02_Lexical_Structure.md#identifier)
>
<!-- -->
> 元組類型語法
>
> *元組類型* → **(** **)** | **(** [元組類型元素](./03_Types.md#tuple-type-element) **,** [元組類型元素列表](./03_Types.md#tuple-type-element-list) **)**
>
> *元組類型元素列表* → [元組類型元素](./03_Types.md#tuple-type-element) | [元組類型元素](./03_Types.md#tuple-type-element) **,** [元組類型元素列表](./03_Types.md#tuple-type-element-list)
>
> *元組類型元素* → [元素名](./03_Types.md#element-name) [類型注解](./03_Types.md#type-annotation) | [類型](./03_Types.md#type)
>
> *元素名* → [標識符](./02_Lexical_Structure.md#identifier)
<!-- -->
> 函數類型語法
>
> *函數類型* → [類型](./03_Types.md#type) **throws**<sub>可選</sub>**->** [類型](./03_Types.md#type)
>
> *函數類型* → [類型](./03_Types.md#) **rethrows** **->** [類型](./03_Types.md#)
>
> *函數類型子句* → **(** **)**
>
> *函數類型子句* → **(** [函數類型參數列表](./03_Types.md#function-type-argument-list) *...*-<sub>可選</sub> **)**
>
> *函數類型參數列表* → [函數類型參數](./03_Types.md#function-type-argument) | [函數類型參數](function-type-argument), [函數類型參數列表](./03_Types.md#function-type-argument-list)
>
> *函數類型參數* → [特性列表](./07_Attributes.md#attributes)<sub>可選</sub> **輸入輸出參數**<sub>可選</sub> [類型](#type) | [參數標簽](#argument-label) [類型注解](#type-annotation)
>
> *參數標簽* → [標識符](./02_Lexical_Structure.md#identifier)
<!-- -->
> 數組類型語法
>
> *數組類型* → **[** [*類型*](./03_Types.md#array-type) **]**
<!-- -->
> 字典類型語法
>
> *字典類型* → **[** [類型 **:** 類型](./03_Types.md#type) **]**
<!-- -->
> 可選類型語法
>
> *可選類型* → [類型](./03_Types.md#type) **?**
>
<!-- -->
> 隱式解析可選類型(Implicitly Unwrapped Optional Type)語法
>
> *隱式解析可選類型* → [類型](./03_Types.md#type) **!**
>
<!-- -->
> 協議合成類型語法
>
> *協議合成類型* → [類型標識符](./03_Types.md#type-identifier) | [協議合成延續](./03_Types.md#protocol-composition-continuation)
>
> *協議持續延續* → [類型標識符](./03_Types.md#type-identifier) | [協議合成類型](./03_Types.md#protocol-composition-type)
<!-- -->
> 元(Metatype)類型語法
>
> *元類型* → [類型](./03_Types.md#type) **.** **Type** | [類型](./03_Types.md#type) **.** **Protocol**
<!-- -->
> 類型繼承從句語法
>
> *類型繼承從句* → **:** [類型繼承集](./03_Types.md#type-inheritance-list)
>
> *類型繼承集* → [類型標識符](./03_Types.md#type-identifier) | [類型標識符](./03_Types.md#type-identifier) **,** [類型繼承集](./03_Types.md#type-inheritance-list)
>
> *類條件* → **class**
## 表達式 {#expressions}
> 表達式語法
>
> *表達式* → [try 運算符](./04_Expressions.md#try-operator)<sub>可選</sub> [前綴表達式](./04_Expressions.md#prefix-expression) [二元表達式列表](./04_Expressions.md#binary-expressions)
>
> *表達式列表* → [表達式](./04_Expressions.md#expression)|[表達式](./04_Expressions.md#expression), [表達式列表](./04_Expressions.md#expression-list)
>
<!-- -->
> 前綴表達式語法
>
> *前綴表達式* → [前綴操作符]()<sub>可選</sub> [前綴表達式](./04_Expressions.md#prefix-expression)
>
> *前綴表達式* → [輸入輸出表達式](./04_Expressions.md#in-out-expression)
>
> *輸入輸出表達式* → **&** [標識符](./02_Lexical_Structure.md#identifier)
>
<!-- -->
>try 表達式語法
>
> *try 操作符* → **try** | **try ? ** | ** try ! **
>
<!-- -->
> 二元表達式語法
>
> *二元表達式* → [二元運算符](./02_Lexical_Structure.md#binary-operator) [前綴表達式](./04_Expressions.md#prefix-expression)
>
> *二元表達式* → [賦值操作符](./06_Declarations.md#class-declaration) [try 運算符](./04_Expressions.md#try-operator)<sub>可選</sub> [前綴表達式](./04_Expressions.md#prefix-expression)
>
> *二元表達式* → [條件運算符](./04_Expressions.md#conditional-operator) [try 運算符](./04_Expressions.md#try-operator)<sub>可選</sub> [前綴表達式](./04_Expressions.md#prefix-expression)
>
> *二元表達式* → [類型轉換運算符](./04_Expressions.md#type-casting-operator)
>
> *二元表達式* → [二元表達式](./04_Expressions.md#binary-expression) [二元表達式列表](./04_Expressions.md#binary-expressions)<sub>可選</sub>
>
<!-- -->
> 賦值操作符語法
>
> *賦值運算符* → [=]
>
<!-- -->
> 條件運算符
>
> *條件運算符* → [?] [表達式](./04_Expressions.md#expression):
> 類型轉換運算符語法
>
> *類型轉換運算符* → [is] [類型](./03_Types.md#type)
>
> *類型轉換運算符* → [as] [類型](./03_Types.md#type)
>
> *類型轉換運算符* → [as ?] [類型](./03_Types.md#type)
>
> *類型轉換運算符* → [as !] [類型](./03_Types.md#type)
>
<!-- -->
> 基礎表達式語法
>
> *基礎表達式* → [標識符](./02_Lexical_Structure.md#identifier) [泛型實參子句](./09_Generic_Parameters_and_Arguments.md#generic-argument-clause)<sub>可選</sub>
>
> *基礎表達式* → [字面量表達式](./04_Expressions.md#literal-expression)
>
> *基礎表達式* → [self 表達式](./04_Expressions.md#self-expression)
>
> *基礎級表達式* → [父類表達式](./04_Expressions.md#superclass-expression)
>
> *基礎表達式* → [閉包表達式](./04_Expressions.md#closure-expression)
>
> *基礎表達式* → [圓括號表達式](./04_Expressions.md#parenthesized-expression)
>
> *基礎表達式* → [元組表達式](./04_Expressions.md#Tuple-Expression)
>
> *基礎表達式* → [隱式成員表達式](./04_Expressions.md#implicit-member-expression)
>
> *基礎表達式* → [通配符表達式](./04_Expressions.md#wildcard-expression)
>
> *基礎表達式* → [key-path表達式](./04_Expressions.md#key-path-expression)
>
> *基礎表達式* → [選擇器表達式](./04_Expressions.md#selector-expression)
>
> *基礎表達式* → [key-path 字符串表達式](./04_Expressions.md#key-patch-string-expression)
<!-- -->
> 字面量表達式語法
>
> *字面量表達式* → [字面量](./04_Expressions.md#literal-expression)
>
> *字面量表達式* → [數組字面量](./04_Expressions.md#array-literal) | [字典字面量](./04_Expressions.md#dictionary-literal) | [練習場字面量](./04_Expressions.md#playground-literal)
>
> *字面量表達式* → **#file** | **#filePath** | **#line** | **#column** | **#function** | **dsohandle**
>
>*數組字面量* → **[** [數組字面量項列表](./04_Expressions.md#array-literal-items)<sub>可選</sub> **]**
> *數組字面量項列表* → [數組字面量項](./04_Expressions.md#array-literal-item)<sub>可選</sub> | [數組字面量項](./04_Expressions.md#array-literal-item),[數組字面量項列表](./04_Expressions.md#array-literal-items)
> *數組字面量項* → [表達式](./04_Expressions.md#expression)
>
>
>*字典字面量* → [[字典字面量項列表](./04_Expressions.md#dictionary-literal-items) **]** | **[** **:** **]**
>
>
> *字典字面量項列表* → [字典字面量項](./04_Expressions.md#dictionary-literal-item) ,**<sub>可選</sub> | [字典字面量項](./04_Expressions.md#dictionary-literal-item) ,[字典字面量項列表](./04_Expressions.md#dictionary-literal-items)
>
>*字典字面量項* → [表達式](./04_Expressions.md#expression) **:** [表達式](./04_Expressions.md#expression)
>
>
> *palyground 字面量* → **#colorLiteral ( red : [表達式](./04_Expressions.md#expression) , green :[表達式](./04_Expressions.md#expression), blue :[表達式](./04_Expressions.md#expression) , alpha : [表達式](./04_Expressions.md#expression) )**
>
>*playground 字面量* → **#fileLiteral ( resourceName : [表達式](#expression) )**
>
>*playground 字面量* → **#imageLiteral ( resourceName : [表達式](#expression) )
> <!-- -->
> self 表達式語法
>
> *self 表達式* → **self** | [self 方法表達式](./04_Expressions.md#self-method-expression) | [self 下標表達式](./04_Expressions.md#self-subscript-expression) | [self 構造器表達式](./04_Expressions.md#self-initializer-expression)
>
>
> *self 方法表達式* → **self** **.** [標識符](./02_Lexical_Structure.md#identifier)
>
> *self 下標表達式* → **self** **[** [函數調用參數表](./04_Expressions.md#function-call-argument-list-) **]**
>
> *self 構造器表達式* → **self** **.** **init**
<!-- -->
> 父類表達式語法
>
> *父類表達式* → [父類方法表達式](./04_Expressions.md#superclass-method-expression) | [父類下標表達式](./04_Expressions.md#superclass-subscript-expression) | [父類構造器表達式](./04_Expressions.md#superclass-initializer-expression)
>
> *父類方法表達式* → **super** **.** [標識符](./02_Lexical_Structure.md#identifier)
>
> *父類下標表達式* → **super** [[函數調用參數表](./04_Expressions.md#function-call-argument-list-) **]**
>
> *父類構造器表達式* → **super** **.** **init**
>
<!-- -->
> 閉包表達式語法
>
> *閉包表達式* → **{** [閉包簽名](./04_Expressions.md#closure-signature)<sub>可選</sub> [語句](./04_Expressions.md#statements) **}**
>
>
> 閉包簽名* → [參數子句](./04_Expressions.md#parameter-clause) [函數結果](./06_Declarations.md#function-result)<sub>可選</sub> **in**
>
> *閉包簽名* → [標識符列表](./04_Expressions.md#identifier-list) [函數結果](./06_Declarations.md#function-result)<sub>可選</sub> **in**
>
>
> *閉包參數子句* **(** **)** | **(** [閉包參數列表](./04_Expressions.md#closure-parameter-list) | [標識符列表](./04_Expressions.md#identifier-list) **)**
>
> *閉包參數列表* [閉包參數](./04_Expressions.md#implicit-member-expression) | [閉包參數](./04_Expressions.md#implicit-member-expression), [閉包參數列表](./04_Expressions.md#implicit-member-expression)
>
> *閉包參數* [閉包參數名](./04_Expressions.md#implicit-member-expression) [類型聲明](./03_Types.md#type-annotation) <sub>可選</sub>
>
> *閉包參數* [閉包參數名](./04_Expressions.md#implicit-member-expression) [類型聲明](./03_Types.md#type-annotation) **...**
>
> *閉包參數名* [標識符](./02_Lexical_Structure.md#identifier)
>
>
> *捕獲列表* → [捕獲列表](./04_Expressions.md#capture-list) **[** [捕獲列表項列表](./04_Expressions.md#capture-list-items) **]**
>
> *捕獲列表項列表* → [捕獲列表項](./04_Expressions.md#capture-list-item) | [捕獲列表項](./04_Expressions.md#capture-list-item) **,** [捕獲列表項列表](./04_Expressions.md#capture-list-items)
>
> *捕獲列表項* → [捕獲說明符](./04_Expressions.md#capture-specifier)<sub>可選</sub> [*表達式*](./04_Expressions.md#expression)
>
> *捕獲說明符* → **weak** | **unowned** | **unowned(safe)** | **unowned(unsafe)**
>
<!-- -->
> 隱式成員表達式語法
>
> *隱式成員表達式* → **.** [標識符](./02_Lexical_Structure.md#identifier)
>
<!-- -->
> 圓括號表達式語法
>
> *圓括號表達式* → **( [表達式](./04_Expressions.md#expression) )**
>
<!-- -->
> 元組表達式語法
>
> *元組表達式* → **( )** | **(**[元組元素](./04_Expressions.md#tuple-element), [元組元素列表](./04_Expressions.md#tuple-element-list) **)**
>
> *元組元素列表* → [元組元素](./04_Expressions.md#tuple-element) | [元組元素](./04_Expressions.md#tuple-element) **,** [元組元素列表](./04_Expressions.md#tuple-element-list)
> *元組元素* → [表達式](./04_Expressions.md#expression) | [標識符](./04_Expressions.md#identifier) **:** [表達式](./04_Expressions.md##expression)
>
<!-- -->
> 通配符表達式語法
>
> *通配符表達式* → **_**
>
<!-- -->
> key-path表達式語法
>
> *key-path 表達式* → **\** [類型](./03_Types.md#type)<sub>可選</sub> **.** [多個 key-path 組件]
> *多個 key-path 組件* → [key-path 組件](./04_Expressions.md#key-path-component) | [key-path 組件](./04_Expressions.md#key-path-component) **.** [多個 key-path 組件](./04_Expressions.md#key-path-components)
> *key-path 組件* → [標識符](./02_Lexical_Structure.md#identifier) [多個 key-path 后綴](./04_Expressions.md#key-path-postfixes)<sub>可選<sub> | [多個 key-path 后綴](./04_Expressions.md#key-path-postfixes)
> *多個 key-path 后綴* → [key-path 后綴](./04_Expressions.md#key-path-postfix) [多個 key-path 后綴](./04_Expressions.md#key-path-postfixes)<sub>可選<sub> key-path-postfixes {./04_Expressions.md#key-path-postfixes}
>
> *key-path 后綴* → **?** | **!** | **self** | **\[** [函數調用參數表](./04_Expressions.md#function-call-argument-list) **\]**
>
<!-- -->
> 選擇器表達式語法
>
> *選擇器表達式* → **#selector** **(** [*表達式*](./04_Expressions.md#expression) **)**
>
> *選擇器表達式* → **#selector** **(** [*getter:表達式*](./04_Expressions.md#expression) **)**
>
> *選擇器表達式* → **#selector** **(** [*setter:表達式*](./04_Expressions.md#expression) **)**
>
<!-- -->
> key-path 字符串表達式語法
> *key-path 字符串表達式* → **#keyPath (** [表達式](./04_Expressions.md#expression) **)**
>
<!-- -->
> 后綴表達式表達式語法
>
> *后綴表達式* → [基本表達式](./04_Expressions.md#primary-expression)
>
> *后綴表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) [后綴運算符](02_Lexical_Structure.md#postfix-operator)
>
> *后綴表達式* → [函數調用表達式](./04_Expressions.md#function-call-expression)
>
> *后綴表達式* → [構造器表達式](./04_Expressions.md#initializer-expression)
>
> *后綴表達式* → [顯式成員表達式](./04_Expressions.md#explicit-member-expression)
>
> *后綴表達式* → [后綴 self 表達式](./04_Expressions.md#postfix-self-expression)
>
> *后綴表達式* → [下標表達式](./04_Expressions.md#subscript-expression)
>
> *后綴表達式* → [強制取值表達式](./04_Expressions.md#forced-value-expression)
>
> *后綴表達式* → [可選鏈表達式](./04_Expressions.md#optional-chaining-expression)
>
<!-- -->
> 函數調用表達式語法
>
> *函數調用表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) [函數調用參數子句](./04_Expressions.md#function-call-argument-clause)
>
> *函數調用表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) [函數調用參數子句](./04_Expressions.md#function-call-argument-clause)<sub>可選</sub> [尾隨閉包](./04_Expressions.md#trailing-closure)
>
> *函數調用參數子句* → **(** **)** | **(** [函數調用參數表](./04_Expressions.md#function-call-argument-list) **)**
>
> *函數調用參數表* → [函數調用參數](./04_Expressions.md#function-call-argument) | [函數調用參數](./04_Expressions.md#function-call-argument) **,** [函數調用參數表](./04_Expressions.md#function-call-argument-list)
>
> *函數調用參數* → [表達式](./04_Expressions.md#expression) | [標識符](02_Lexical_Structure.md#identifier) **:** [表達式](./04_Expressions.md#expression)
>
> *函數調用參數* → [運算符](./02_Lexical_Structure.md#operator) | [標識符](./02_Lexical_Structure.md#identifier) **:** [運算符](./02_Lexical_Structure.md#operator)
>
> *尾隨閉包* → [閉包表達式](./04_Expressions.md#closure-expression) [標簽尾隨閉包]()<sub>可選</sub>
>
> *標簽尾隨閉包集*→ [標簽尾隨閉包](./04_Expressions.md#labeled-trailing-closure) [標簽尾隨閉包集](./04_Expressions.md#labeled-trailing-closures)
>
> *標簽尾隨閉包*→ [標識符](./02_Lexical_Structure.md#identifier) **:** [閉包表達式](./04_Expressions.md#closure-expression)
<!-- -->
> 初始化表達式語法
>
> *構造器表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) **.** **init**
>
> *構造器表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) **.** **init** **(** [參數名稱](./04_Expressions.md#argument-names) **)**
>
<!-- -->
> 顯式成員表達式語法
>
> *顯式成員表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) **.** [十進制數字] (02_Lexical_Structure.md#decimal-digit)
>
> *顯式成員表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) **.** [標識符](02_Lexical_Structure.md#identifier) [泛型實參子句](./09_Generic_Parameters_and_Arguments.md#generic-argument-clause)<sub>可選</sub><br/>
>
> *顯式成員表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) **.** [標識符] (02_Lexical_Structure.md#identifier) **(** [參數名稱](./04_Expressions.md#argument-names) **)**
>
> *參數名稱* → [參數名](./04_Expressions.md#argument-name) [參數名稱](./04_Expressions.md#argument-names)<sub>可選</sub><br/>
>
> *參數名* → [標識符](./02_Lexical_Structure.md#identifier) **:**
>
<!-- -->
> 后綴 self 表達式語法
>
> *后綴 self 表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) **.** **self**
>
<!-- -->
> 下標表達式語法
>
> *下標表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) **[** [表達式列表](./04_Expressions.md#expression-list) **]**
>
<!-- -->
> 強制取值表達式語法
> *強制取值表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) **!**
>
<!-- -->
> 可選鏈式表達式語法
> *可選鏈表達式* → [后綴表達式](./04_Expressions.md#postfix-expression) **?**
>
## 語句 {#statements}
> 語句語法
>
> *語句* → [表達式](./04_Expressions.md#expression) **;**<sub>可選</sub>
>
> *語句* → [聲明](./06_Declarations.md#declaration) **;**<sub>可選</sub>
>
> *語句* → [循環語句](./05_Statements.md#loop-statement) **;**<sub>可選</sub>
>
> *語句* → [分支語句](./05_Statements.md#branch-statement) **;**<sub>可選</sub>
>
> *語句* → [標簽語句](./05_Statements.md#labeled-statement) **;**<sub>可選</sub>
>
> *語句* → [控制轉移語句](./05_Statements.md#control-transfer-statement) **;**<sub>可選</sub>
>
> *語句* → [延遲語句](./05_Statements.md#defer-statement) **;**<sub>可選</sub>
>
> *語句* → [執行語句](./05_Statements.md#do-statement) **;**<sub>可選</sub>
>
> *語句* → [編譯控制語句](./05_Statements.md#compiler-control-statement)
>
> *語句集* → [語句](./05_Statements.md#statement) [語句集](./05_Statements.md#statements)<sub>可選</sub>
>
<!-- -->
> 循環語句語法
>
> *循環語句* → [for-in 語句](./05_Statements.md#for-in-statement)
>
> *循環語句* → [while 語句](./05_Statements.md#wheetatype 類型 ile-statement)
>
> *循環語句* → [repeat-while 語句](./05_Statements.md#do-while-statement)
>
<!-- -->
> For-In 循環語法
>
> *for-in 語句* → **for case**<sub>可選</sub> [模式](./08_Patterns.md#pattern) **in** [表達式](./04_Expressions.md#expression) [where 子句](./05_Statements.md#where-clause)<sub>可選</sub> [代碼塊](./06_Declarations.md#code-block)
>
<!-- -->
> While 循環語法
>
> *while 語句* → **while** [條件集](./05_Statements.md#condition-list) [代碼塊](./06_Declarations.md#code-block)
>
> *條件集* → [條件](./05_Statements.md#condition) | [條件](./05_Statements.md#condition) **,** [條件集](./05_Statements.md#condition-list)
> *條件* → [表達式](./04_Expressions.md#expression) | [可用性條件](./05_Statements.md#availability-condition) | [case 條件](./05_Statements.md#case-condition) | [可選綁定條件](./05_Statements.md#optional-binding-condition)
>
> *case 條件* → **case** [模式](./08_Patterns.md#pattern) [構造器](./06_Declarations.md#initializer)
>
> *可選綁定條件* → **let** [模式](./08_Patterns.md#pattern) [構造器](./06_Declarations.md#initializer) | **var** [模式](./08_Patterns.md#pattern) [構造器](./06_Declarations.md#initializer)
>
<!-- -->
> Repeat-While 語句語法
>
*repeat-while-statement* → **repeat** [代碼塊](./06_Declarations.md#code-block) **while** [表達式](./04_Expressions.md#expression)
<!-- -->
> 分支語句語法
>
> *分支語句* → [if 語句](./05_Statements.md#if-statement)
>
> *分支語句* → [guard 語句](./05_Statements.md#guard-statement)
>
> *分支語句* → [switch 語句](./05_Statements.md#switch-statement)
>
<!-- -->
> If 語句語法
>
> *if 語句* → **if** [條件集](./05_Statements.md#condition-list) [代碼塊](./06_Declarations.md#code-block) [else 子句](./05_Statements.md#else-clause)<sub>可選</sub>
>
> *else 子句* → **else** [代碼塊](./06_Declarations.md#code-block) | **else** [if 語句](./05_Statements.md#if-statement)
>
<!-- -->
> Guard 語句語法
>
> *guard 語句* → **guard** [條件集](./05_Statements.md#condition-list) **else** [代碼塊](./06_Declarations.md#code-block)
>
<!-- -->
> Switch 語句語法
>
> *switch 語句* → **switch** [表達式](./04_Expressions.md#expression) **{** [switch-case集](./05_Statements.md#switch-cases)<sub>可選</sub> **}**
>
> *switch-case集* → [switch-case](./05_Statements.md#switch-case) [switch-case集](./05_Statements.md#switch-cases)<sub>可選</sub>
>
> *switch-case* → [case 標簽](./05_Statements.md#case-label) [語句集](./05_Statements.md#statements)
>
> *switch-case* → [default 標簽](./05_Statements.md#default-label) [語句集](./05_Statements.md#statements)
>
> *switch-case* → [條件 switch-case](./05_Statements.md#conditional-switch-case)
>
> *case 標簽* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> **case** [case 項集](./05_Statements.md#case-item-list) **:**
>
> *case 項集* → [模式](./08_Patterns.md#pattern) [where 子句](./05_Statements.md#where-clause)<sub>可選</sub> | [模式](./08_Patterns.md#pattern) [where 子句](./05_Statements.md#guard-clause)<sub>可選</sub> **,** [case 項集](./05_Statements.md#case-item-list)
>
> *default 標簽* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> **default** **:**
>
> *where 子句* → **where** [where 表達式](./05_Statements.md#where-expression)
>
> *where 表達式* → [表達式](./04_Expressions.md#expression)
>
> *條件 switch-case* → [switch if 指令子句](./05_Statements.md#switch-if-directive-clause) [switch elseif 指令子句集](./05_Statements.md#switch-elseif-directive-clauses)<sub>可選</sub> [switch else 指令子句](./05_Statements.md#switch-else-directive-clause)<sub>可選</sub> [endif 指令](./05_Statements.md#endif-directive)
>
> *switch if 指令子句* → [if 指令](./05_Statements.md#if-directive) [編譯條件](./05_Statements.md#compilation-condition) [switch-case集](./05_Statements.md#switch-cases)<sub>可選</sub>
>
> *switch elseif 指令子句集* → [elseif 指令子句](./05_Statements.md#else-if-directive-clause) [switch elseif 指令子句集](./05_Statements.md#switch-elseif-directive-clauses)<sub>可選</sub>
>
> *switch elseif 指令子句* → [elseif 指令](./05_Statements.md#elseif-directive) [編譯條件](./05_Statements.md#compilation-condition) [switch-case集](./05_Statements.md#switch-cases)<sub>可選</sub>
>
> *switch else 指令子句* → [else 指令](./05_Statements.md#else-directive) [switch-case集](./05_Statements.md#switch-cases)<sub>可選</sub>
>
<!-- -->
> 標簽語句語法
>
> *標簽語句* → [語句標簽](./05_Statements.md#statement-label) [循環語句](./05_Statements.md#loop-statement)
>
> *標簽語句* → [語句標簽](./05_Statements.md#statement-label) [if 語句](./05_Statements.md#if-statement)
>
> *標簽語句* → [語句標簽](./05_Statements.md#statement-label) [switch 語句](./05_Statements.md#switch-statement)
>
> *標簽語句* → [語句標簽](./05_Statements.md#statement-label) [do 語句](./05_Statements.md#do-statement)
>
> *語句標簽* → [標簽名稱](./05_Statements.md#label-name) **:**
>
> *標簽名稱* → [標識符](./02_Lexical_Structure.md#identifier)
>
<!-- -->
> 控制轉移語句語法
>
> *控制轉移語句* → [break 語句](./05_Statements.md#break-statement)
>
> *控制轉移語句* → [continue 語句](./05_Statements.md#continue-statement)
>
> *控制轉移語句* → [fallthrough 語句](./05_Statements.md#fallthrough-statement)
>
> *控制轉移語句* → [return 語句](./05_Statements.md#return-statement)
>
> *控制轉移語句* → [throw 語句](./05_Statements.md#throw-statement)
>
<!-- -->
> Break 語句語法
>
> *break 語句* → **break** [標簽名稱](./05_Statements.md#label-name)<sub>可選</sub>
>
<!-- -->
> Continue 語句語法
>
> *continue 語句* → **continue** [標簽名稱](./05_Statements.md#label-name)<sub>可選</sub>
>
<!-- -->
> Fallthrough 語句語法
>
> *fallthrough 語句* → **fallthrough**
>
<!-- -->
> Return 語句語法
>
> *return 語句* → **return** [表達式](./04_Expressions.md#expression)<sub>可選</sub>
>
<!-- -->
> Throw 語句語法
>
> *throw 語句* → **throw** [表達式](./04_Expressions.md#expression)
>
<!-- -->
> Defer 語句語法
>
> *defer 語句* → **defer** [代碼塊](./06_Declarations.md#code-block)
>
<!-- -->
> Do 語句語法
>
> *do 語句* → **do** [代碼塊](./06_Declarations.md#code-block) [catch 子句集](./05_Statements.md#catch-clauses)<sub>可選</sub>
>
> *catch 子句集* → [catch 子句](./05_Statements.md#catch-clause) [catch 子句集](05_Statements.md#catch-clauses)<sub>可選</sub>
>
> *catch 子句* → **catch** [catch 模式列表]()<sub>可選</sub> [代碼塊](./06_Declarations.md#code-block)<sub>可選</sub>
>
> *catch 模式列表* → [catch 模式](./05_Statements.md#catch-pattern) | [catch 模式](./05_Statements.md#catch-pattern) ,[catch 模式列表](./05_Statements.md#catch-pattern-list)
>
> *catch 模式* → [模式](./08_Patterns.md#pattern) [where 子句](./05_Statements.md#where-clause)<sub>可選</sub>
<!-- -->
> 編譯控制語句
>
> *編譯控制語句* → [條件編譯塊](./05_Statements.md#conditional-complation-block)
>
> *編譯控制語句* → [行控制語句](./05_Statements.md#line-control-statement)
>
> *編譯控制語句* → [診斷語句](./05_Statements.md#diagnostic-statement)
>
<!-- -->
> 條件編譯塊語法
>
> *條件編譯塊* → [if 指令子句](./05_Statements.md#if-directive-clause) [elseif 指令子句集](./05_Statements.md#elseif-directive-clauses)<sub>可選</sub> [else 指令子句](./05_Statements.md#else-directive-clause)<sub>可選</sub> [endif 指令](./05_Statements.md#endif-directive)
>
> *if 指令子句* → [if 指令](./05_Statements.md#if-directive) [編譯條件](./05_Statements.md#compilation-condition) [語句集](./05_Statements.md#statements)<sub>可選</sub>
>
> *elseif 指令子句集* → [elseif 指令子句](./05_Statements.md#else-if-directive-clause) [elseif 指令子句集](./05_Statements.md#elseif-directive-clauses)<sub>可選</sub>
>
> *elseif 指令子句* → [elseif 指令](./05_Statements.md#elseif-directive) [編譯條件](./05_Statements.md#compilation-condition) [語句集](./05_Statements.md#statements)<sub>可選</sub>
>
> *else 指令子句* → [else 指令](./05_Statements.md#else-directive) [語句集](./05_Statements.md#statements)<sub>可選</sub>
>
> *if 指令* → **#if**
>
> *elseif 指令* → **#elseif**
>
> *else 指令* → **#else**
>
> *endif 指令* → **#endif**
>
> *編譯條件* → [平臺條件](./05_Statements.md#platform-condition)
>
> *編譯條件* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *編譯條件* → [布爾字面量](./02_Lexical_Structure.md#boolean-literal)
>
> *編譯條件* → **(** [編譯條件](./05_Statements.md#compilation-condition) **)**
>
> *編譯條件* → **!** [編譯條件](./05_Statements.md#compilation-condition)
>
> *編譯條件* → [編譯條件](./05_Statements.md#compilation-condition) **&&** [編譯條件](./05_Statements.md#compilation-condition)
>
> *編譯條件* → [編譯條件](./05_Statements.md#compilation-condition) **||** [編譯條件](./05_Statements.md#compilation-condition)
>
> *平臺條件* → **os** **(** [操作系統](./05_Statements.md#operating-system) **)**
>
> *平臺條件* → **arch** **(** [架構](./05_Statements.md#architecture) **)**
>
> *平臺條件* → **swift** **(** **>=** [swift 版本](./05_Statements.md#swift-version) **)** | **swift** **(** **<** [swift 版本](./05_Statements.md#swift-version) **)**
>
> *平臺條件* → **compiler** **(** **>=** [swift 版本](./05_Statements.md#swift-version) **)** | **compiler** **(** **<** [swift 版本](./05_Statements.md#swift-version) **)**
>
> *平臺條件* → **canImport** **(** [模塊名](./05_Statements.md#module-name) **)**
>
> *平臺條件* → **targetEnvironment** **(** [環境](./05_Statements.md#environment) **)**
>
> *操作系統* → **macOS** | **iOS** | **watchOS** | **tvOS**
>
> *架構* → **i386** | **x86_64** | **arm** | **arm64**
>
> *swift 版本* → [十進制數字集](./02_Lexical_Structure.md#decimal-digits) [swift 版本后綴](./05_Statements.md#swift-version-continuation)<sub>可選</sub>
>
> *swift 版本后綴* → **.** [十進制數字集](./02_Lexical_Structure.md#decimal-digits) [swift 版本集](./05_Statements.md#swift-version-continuation)<sub>可選</sub>
>
> *模塊名* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *環境* → **模擬器** | **macCatalyst**
<!-- -->
> 行控制語句語法
>
> *行控制語句* → **#sourceLocation** **(** **file:** [文件名](./05_Statements.md#file-name) **,** **line:** [行號](./05_Statements.md#line-number) **)**
>
> *行控制語句* → **#sourceLocation** **(** **)**
>
> *行號* → 一個大于 0 的十進制數字
>
> *文件名* → [靜態字符串字面量](./02_Lexical_Structure.md#static-string-literal)
>
<!-- -->
> 編譯期診斷語句語法
>
> *診斷語句* → **#error** **(** [診斷信息](./05_Statements.md#diagnostic-message) **)**
>
> *診斷語句* → **#warning** **(** [診斷信息](./05_Statements.md#diagnostic-message) **)**
>
> *診斷信息* → [靜態字符串字面量](./02_Lexical_Structure.md#static-string-literal)
>
<!-- -->
> 可用性條件語法
>
> *可用性條件* → **#available** **(** [可用性參數集](./05_Statements.md#availability-arguments) **)**
>
> *可用性參數集* → [可用性參數](./05_Statements.md#availability-argument) | [可用性參數](./05_Statements.md#availability-argument) , [可用性參數集)](./05_Statements.md#availability-arguments)
>
> *可用性參數* → [平臺名](./05_Statements.md#platform-name) [平臺版本](./05_Statements.md#platform-version)
>
> *可用性參數* → **\***
>
> *平臺名* → **iOS** | **iOSApplicationExtension**
>
> *平臺名* → **macOS** | **macOSApplicationExtension**
>
> *平臺名* → **watchOS**
>
> *平臺名* → **tvOS**
>
> *平臺版本* → [十進制數字集](./02_Lexical_Structure.md#decimal-digits)
>
> *平臺版本* → [十進制數字集](./02_Lexical_Structure.md#decimal-digits) **.** [十進制數字集](./02_Lexical_Structure.md#decimal-digits)
>
> *平臺版本* → [十進制數字集](./02_Lexical_Structure.md#decimal-digits) **.** [十進制數字集](./02_Lexical_Structure.md#decimal-digits) **.** [十進制數字集](./02_Lexical_Structure.md#decimal-digits)
>
## 聲明 {#declarations}
> 聲明語法
>
> *聲明* → [導入聲明](./06_Declarations.md#import-declaration)
>
> *聲明* → [常量聲明](./06_Declarations.md#constant-declaration)
>
> *聲明* → [變量聲明](./06_Declarations.md#variable-declaration)
>
> *聲明* → [類型別名聲明](./06_Declarations.md#typealias-declaration)
>
> *聲明* → [函數聲明](./06_Declarations.md#function-declaration)
>
> *聲明* → [枚舉聲明](./06_Declarations.md#enum-declaration)
>
> *聲明* → [結構體聲明](./06_Declarations.md#struct-declaration)
>
> *聲明* → [類聲明](./06_Declarations.md#class-declaration)
>
> *聲明* → [協議聲明](./06_Declarations.md#protocol-declaration)
>
> *聲明* → [構造器聲明](./06_Declarations.md#initializer-declaration)
>
> *聲明* → [析構器聲明](./06_Declarations.md#deinitializer-declaration)
>
> *聲明* → [擴展聲明](./06_Declarations.md#extension-declaration)
>
> *聲明* → [下標聲明](./06_Declarations.md#subscript-declaration)
>
> *聲明* → [運算符聲明](./06_Declarations.md#operator-declaration)
>
> *聲明* → [優先級組聲明](./06_Declarations.md#precedence-group-declaration)
>
> *聲明集* → [聲明](./06_Declarations.md#declaration) [聲明集](./06_Declarations.md#declarations)<sub>可選</sub>
>
<!-- -->
> 頂級聲明語法
>
> *頂級聲明* → [多條語句](./05_Statements.md#statements)<sub>可選</sub>
>
<!-- -->
> 代碼塊語法
>
> *代碼塊* → **{** [多條語句](./05_Statements.md#statements)<sub>可選</sub> **}**
>
<!-- -->
> 導入聲明語法
>
> *導入聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> **import** [導入類型](./06_Declarations.md#import-kind)<sub>可選</sub> [導入路徑](./06_Declarations.md#import-path)
>
> *導入類型* → **typealias** | **struct** | **class** | **enum** | **protocol** | **let** | **var** | **func**
>
> *導入路徑* → [導入路徑標識符](./06_Declarations.md#import-path-identifier) | [導入路徑標識符](./06_Declarations.md#import-path-identifier) **.** [導入路徑](./06_Declarations.md#import-path)
>
> *導入路徑標識符* → [標識符](./02_Lexical_Structure.md#identifier) | [運算符](./02_Lexical_Structure.md#operator)
>
<!-- -->
> 常數聲明語法
>
> *常量聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [聲明修飾符集](./06_Declarations.md#declaration-specifiers)<sub>可選</sub> **let** [模式構造器集](./06_Declarations.md#pattern-initializer-list)
>
> *模式構造器集* → [模式構造器](./06_Declarations.md#pattern-initializer) | [模式構造器](./06_Declarations.md#pattern-initializer) **,** [模式構造器集](./06_Declarations.md#pattern-initializer-list)
>
> *模式構造器* → [模式](./08_Patterns.md#pattern) [構造器](./06_Declarations.md#initializer)<sub>可選</sub>
>
> *構造器* → **=** [表達式](./04_Expressions.md#expression)
<!-- -->
> 變量聲明語法
>
> *變量聲明* → [變量聲明頭](./06_Declarations.md#variable-declaration-head) [模式構造器集](./06_Declarations.md#pattern-initializer-list)
>
> *變量聲明* → [變量聲明頭](./06_Declarations.md#variable-declaration-head) [變量名](./06_Declarations.md#variable-name) [類型注解](./03_Types.md#type-annotation) [代碼塊](./06_Declarations.md#code-block)
>
> *變量聲明* → [變量聲明頭](./06_Declarations.md#variable-declaration-head) [變量名](./06_Declarations.md#variable-name) [類型注解](./03_Types.md#type-annotation) [getter-setter 塊](./06_Declarations.md#getter-setter-block)
>
> *變量聲明* → [變量聲明頭](./06_Declarations.md#variable-declaration-head) [變量名](./06_Declarations.md#variable-name) [類型注解](./03_Types.md#type-annotation) [getter-setter 關鍵字塊](./06_Declarations.md#getter-setter-keyword-block)
>
> *變量聲明* → [變量聲明頭](./06_Declarations.md#variable-declaration-head) [變量名](./06_Declarations.md#variable-name) [構造器](./06_Declarations.md#initializer)<sub>可選</sub> [willSet-didSet 代碼塊](./06_Declarations.md#willSet-didSet-block)
>
> *變量聲明* → [變量聲明頭](./06_Declarations.md#variable-declaration-head) [變量名](./06_Declarations.md#variable-name) [類型注解](./03_Types.md#type-annotation) [構造器](./06_Declarations.md#initializer)<sub>可選</sub> [willSet-didSet 代碼塊](./06_Declarations.md#willSet-didSet-block)
>
> *變量聲明頭* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [聲明修飾符集](./06_Declarations.md#declaration-specifiers)<sub>可選</sub> **var**
>
> *變量名稱* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *getter-setter 塊* → [代碼塊](./06_Declarations.md#code-block)
>
> *getter-setter 塊* → **{** [getter 子句](./06_Declarations.md#getter-keyword-clause) [setter 子句](./06_Declarations.md#setter-keyword-clause)<sub>可選</sub> **}**
>
> *getter-setter 塊* → **{** [setter 子句](./06_Declarations.md#setter-keyword-clause) [getter 子句](./06_Declarations.md#getter-keyword-clause) **}**
>
> *getter 子句* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [可變性修飾符](./06_Declarations.md#mutation-modifier)<sub>可選</sub> **get** [代碼塊](./06_Declarations.md#code-block)
>
> *setter 子句* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [可變性修飾符](./06_Declarations.md#mutation-modifier)<sub>可選</sub> **set** [setter 名稱](./06_Declarations.md#setter-name)<sub>可選</sub> [代碼塊](./06_Declarations.md#code-block)
>
> *setter 名稱* → **(** [標識符](./02_Lexical_Structure.md#identifier) **)**
>
> *getter-setter 關鍵字(Keyword)塊* → **{** [getter 關鍵字子句](./06_Declarations.md#getter-keyword-clause) [setter 關鍵字子句](./06_Declarations.md#setter-keyword-clause)<sub>可選</sub> **}**
>
> *getter-setter 關鍵字(Keyword)塊* → **{** [setter 關鍵字子句](./06_Declarations.md#setter-keyword-clause) [getter 關鍵字子句](./06_Declarations.md#getter-keyword-clause) **}**
>
> *getter 關鍵字(Keyword)子句* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [可變性修飾符](./06_Declarations.md#mutation-modifier)<sub>可選</sub> **get**
>
> *setter 關鍵字(Keyword)子句* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [可變性修飾符](./06_Declarations.md#mutation-modifier)<sub>可選</sub> **set**
>
> *willSet-didSet 代碼塊* → **{** [willSet 子句](./06_Declarations.md#willSet-clause) [didSet 子句](./06_Declarations.md#didSet-clause)<sub>可選</sub> **}**
>
> *willSet-didSet 代碼塊* → **{** [didSet 子句](./06_Declarations.md#didSet-clause) [willSet 子句](./06_Declarations.md#willSet-clause)<sub>可選</sub> **}**
>
> *willSet 子句* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> **willSet** [setter 名稱](./06_Declarations.md#setter-name)<sub>可選</sub> [代碼塊](./06_Declarations.md#code-block)
>
> *didSet 子句* → [特性](./07_Attributes.md#attributes)<sub>可選</sub>
>
**didSet** [setter 名稱](./06_Declarations.md#setter-name)<sub>可選</sub> [代碼塊](./06_Declarations.md#code-block)
<!-- -->
> 類型別名聲明語法
>
> *類型別名聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [訪問級別修飾符](./07_Attributes.md#access-level-modifier) **typealias** [類型別名名稱](./06_Declarations.md#typealias-name) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [類型別名賦值](./06_Declarations.md#typealias-assignment)
>
> *類型別名名稱* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *類型別名賦值* → **=** [類型](./03_Types.md#type)
>
<!-- -->
> 函數聲明語法
>
> *函數聲明* → [函數頭](./06_Declarations.md#function-head) [函數名](./06_Declarations.md#function-name) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [函數簽名](./06_Declarations.md#function-signature) [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [函數體](./06_Declarations.md#function-body)<sub>可選</sub>
>
> *函數頭* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [聲明描述符集](./06_Declarations.md#declaration-specifiers)<sub>可選</sub> **func**
>
> *函數名* → [標識符](./02_Lexical_Structure.md#identifier) | [運算符](./02_Lexical_Structure.md#operator)
>
> *函數簽名* → [參數子句](./06_Declarations.md#parameter-clause) **throws**<sub>可選</sub> [函數結果](./06_Declarations.md#function-result)<sub>可選</sub>
>
> *函數簽名* → [參數子句](./06_Declarations.md#parameter-clause) **rethrows** [函數結果](./06_Declarations.md#function-result)<sub>可選</sub>
>
> *函數結果* → **->** [特性](./07_Attributes.md#attributes)<sub>可選</sub> [類型](./03_Types.md#type)
>
> *函數體* → [代碼塊](./06_Declarations.md#code-block)
>
> *參數子句* → **(** **)** | **(** [參數集](./06_Declarations.md#parameter-list) **)**
>
> *參數集* → [參數](./06_Declarations.md#parameter) | [參數](./06_Declarations.md#parameter) **,** [參數集](./06_Declarations.md#parameter-list)
>
> *參數* → [外部參數名](./06_Declarations.md#parameter-name)<sub>可選</sub> [本地參數名](./06_Declarations.md#local-parameter-name) [類型注解](./03_Types.md#type-annotation) [默認參數子句](./06_Declarations.md#default-argument-clause)<sub>可選</sub>
>
> *參數* → [外部參數名](./06_Declarations.md#parameter-name)<sub>可選</sub> [本地參數名](./06_Declarations.md#local-parameter-name) [類型注解](./03_Types.md#type-annotation)
>
> *參數* → [外部參數名](./06_Declarations.md#parameter-name)<sub>可選</sub> [本地參數名](./06_Declarations.md#local-parameter-name) [類型注解](./03_Types.md#type-annotation) **...**
>
> *外部參數名* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *本地參數名* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *默認參數子句* → **=** [表達式](./04_Expressions.md#expression)
>
<!-- -->
> 枚舉聲明語法
>
> *枚舉聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [訪問級別修飾符](./07_Attributes.md#access-level-modifier)<sub>可選</sub> [聯合式枚舉](./06_Declarations.md#union-style-enum)
>
> *枚舉聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [訪問級別修飾符](./07_Attributes.md#access-level-modifier)<sub>可選</sub> [原始值式枚舉](./06_Declarations.md#raw-value-style-enum)
>
> *聯合式枚舉* → **indirect**<sub>可選</sub> **enum** [枚舉名](./06_Declarations.md#enum-name) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [類型繼承子句](./03_Types.md#type-inheritance-clause)<sub>可選</sub> [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> **{** [聯合式枚舉成員](./06_Declarations.md#union-style-enum-members)<sub>可選</sub> **}**
>
> *聯合式枚舉成員集* → [聯合式枚舉成員](./06_Declarations.md#union-style-enum-member) [聯合樣式枚舉成員集](./06_Declarations.md#union-style-enum-members)<sub>可選</sub>
>
> *聯合樣式枚舉成員* → [聲明](./06_Declarations.md#declaration) | [聯合式枚舉 case 子句](./06_Declarations.md#union-style-enum-case-clause) | [編譯控制語句](./05_Statements.md#compiler-control-statement)
>
> *聯合式枚舉 case 子句* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> **indirect**<sub>可選</sub> **case** [聯合式枚舉 case 集](./06_Declarations.md#union-style-enum-case-list)
>
> *聯合式枚舉 case 集* → [聯合式枚舉 case](./06_Declarations.md#union-style-enum-case) | [聯合式枚舉 case](./06_Declarations.md#union-style-enum-case) **,** [聯合式枚舉 case 集](./06_Declarations.md#union-style-enum-case-list)
>
> *聯合式枚舉 case* → [枚舉的 case 名](./06_Declarations.md#enum-case-name) [元組類型](./03_Types.md#tuple-type)<sub>可選</sub>
>
> *枚舉名* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *枚舉的 case 名* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *原始值式枚舉* → **enum** [枚舉名](./06_Declarations.md#enum-name) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [類型繼承子句](./03_Types.md#type-inheritance-clause) [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> **{** [原始值式枚舉成員集](./06_Declarations.md#raw-value-style-enum-members) **}**
>
> *原始值式枚舉成員集* → [原始值式枚舉成員](./06_Declarations.md#raw-value-style-enum-member) [原始值式枚舉成員集](./06_Declarations.md#raw-value-style-enum-members)<sub>可選</sub>
>
> *原始值式枚舉成員* → [聲明](./06_Declarations.md#declaration) | [原始值式枚舉 case 子句](./06_Declarations.md#raw-value-style-enum-case-clause) | [編譯控制語句](./05_Statements.md#compiler-control-statement)
>
> *原始值式枚舉 case 子句* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> **case** [原始值式枚舉 case 集](./06_Declarations.md#raw-value-style-enum-case-list)
>
> *原始值式枚舉 case 集* → [原始值式枚舉 case](./06_Declarations.md#raw-value-style-enum-case) | [原始值式枚舉 case](./06_Declarations.md#raw-value-style-enum-case) **,** [原始值式枚舉 case 集](./06_Declarations.md#raw-value-style-enum-case-list)
>
> *原始值式枚舉 case* → [枚舉的 case 名](./06_Declarations.md#enum-case-name) [原始值賦值](./06_Declarations.md#raw-value-assignment)<sub>可選</sub>
>
> *原始值賦值* → **=** [原始值字面量](./02_Lexical_Structure.md#literal)
>
> *原始值字面量(raw-value-literal)* → [數值字面量](./02_Lexical_Structure.md#literal) | [靜態字符串字面量](./02_Lexical_Structure.md#literal) | [布爾字面量](./02_Lexical_Structure.md#literal)
>
<!-- -->
> 結構體聲明語法
>
> *結構體聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [訪問級別修飾符](./07_Attributes.md#access-level-modifier)<sub>可選</sub> **struct** [結構體名稱](./06_Declarations.md#struct-name) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [類型繼承子句](./03_Types.md#type-inheritance-clause)<sub>可選</sub> [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [結構體主體](./06_Declarations.md#struct-body)
>
> *結構體名稱* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *結構體主體* → **{** [結構體成員集](./06_Declarations.md#declarations)<sub>可選</sub> **}**
>
> *結構體成員集* → [結構體成員](./06_Declarations.md#declarations) [結構體成員集](./06_Declarations.md#declarations)<sub>可選</sub>
>
> *結構體成員* → [聲明集](./06_Declarations.md#declarations) | [編譯控制語句](./05_Statements.md#compiler-control-statement)
>
<!-- -->
> 類聲明語法
>
> *類聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [訪問級別修飾符](./07_Attributes.md#access-level-modifier)<sub>可選</sub> **final**<sub>可選</sub> **class** [類名](./06_Declarations.md#class-name) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [類型繼承子句](./03_Types.md#type-inheritance-clause) [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [類主體](./06_Declarations.md#class-body)
>
> *類聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> **final** [訪問級別修飾符](./07_Attributes.md#access-level-modifier)<sub>可選</sub> **class** [類名](./06_Declarations.md#class-name) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [類型繼承子句](./03_Types.md#type-inheritance-clause) [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [類主體](./06_Declarations.md#class-body)
>
> *類名* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *類主體* → **{** [類成員集](./06_Declarations.md#declarations)<sub>可選</sub> **}**
>
> *類成員集* → [類成員](./06_Declarations.md#declarations) [類成員集](./06_Declarations.md#declarations)<sub>可選</sub>
>
> *類成員* → [聲明集](./06_Declarations.md#declarations) | [編譯控制語句](./05_Statements.md#compiler-control-statement)
>
<!-- -->
> 協議聲明語法
>
> *協議聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [訪問級別修飾符](./07_Attributes.md#access-level-modifier)<sub>可選</sub> **protocol** [協議名](./06_Declarations.md#protocol-name) [類型繼承子句](./03_Types.md#type-inheritance-clause)<sub>可選</sub> [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [協議主體](./06_Declarations.md#protocol-body)
>
> *協議名* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *協議主體* → **{** [協議成員集](./06_Declarations.md#protocol-member-declarations)<sub>可選</sub> **}**
>
> *協議成員集* → [協議成員](./06_Declarations.md#declarations) [協議成員集](./06_Declarations.md#declarations)<sub>可選</sub>
>
> *協議成員* → [協議成員聲明](./06_Declarations.md#declarations) | [編譯控制語句](./05_Statements.md#compiler-control-statement)
>
> *協議成員聲明* → [協議屬性聲明](./06_Declarations.md#protocol-property-declaration)
>
> *協議成員聲明* → [協議方法聲明](./06_Declarations.md#protocol-method-declaration)
>
> *協議成員聲明* → [協議構造器聲明](./06_Declarations.md#protocol-initializer-declaration)
>
> *協議成員聲明* → [協議下標聲明](./06_Declarations.md#protocol-subscript-declaration)
>
> *協議成員聲明* → [協議關聯類型聲明](./06_Declarations.md#protocol-associated-type-declaration)
>
> *協議成員聲明* → [類型別名聲明](./06_Declarations.md#typealias-declaration)
>
<!-- -->
> 協議屬性聲明語法
>
> *協議屬性聲明* → [變量聲明頭](./06_Declarations.md#variable-declaration-head) [變量名](./06_Declarations.md#variable-name) [類型注解](./03_Types.md#type-annotation) [getter-setter 關鍵字塊](./06_Declarations.md#getter-setter-keyword-block)
>
<!-- -->
> 協議方法聲明語法
>
> *協議方法聲明* → [函數頭](./06_Declarations.md#function-head) [函數名](./06_Declarations.md#function-name) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [函數簽名](./06_Declarations.md#function-signature) [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub>
>
<!-- -->
> 協議構造器聲明語法
>
> *協議構造器聲明* → [構造器頭](./06_Declarations.md#initializer-head) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [參數子句](./06_Declarations.md#parameter-clause) **throws**<sub>可選</sub> [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub>
>
> *協議構造器聲明* → [構造器頭](./06_Declarations.md#initializer-head) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [參數子句](./06_Declarations.md#parameter-clause) **rethrows** [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub>
>
<!-- -->
> 協議下標聲明語法
>
> *協議下標聲明* → [下標頭](./06_Declarations.md#subscript-head) [下標結果](./06_Declarations.md#subscript-result) [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [getter-setter 關鍵字塊](./06_Declarations.md#getter-setter-keyword-block)
>
<!-- -->
> 協議關聯類型聲明語法
>
> *協議關聯類型聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [訪問級別修飾符](./07_Attributes.md#access-level-modifier)<sub>可選</sub> **associatedtype** [類型別名](./06_Declarations.md#typealias-name) [類型繼承子句](./03_Types.md#type-inheritance-clause)<sub>可選</sub> [類型別名賦值](./06_Declarations.md#typealias-assignment)<sub>可選</sub> [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub>
>
<!-- -->
> 構造器聲明語法
>
> *構造器聲明* → [構造器頭](./06_Declarations.md#initializer-head) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [參數子句](./06_Declarations.md#parameter-clause) **throws**<sub>可選</sub> [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [構造器主體](./06_Declarations.md#initializer-body)
>
> *構造器聲明* → [構造器頭](./06_Declarations.md#initializer-head) [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [參數子句](./06_Declarations.md#parameter-clause) **rethrows** [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [構造器主體](./06_Declarations.md#initializer-body)
>
> *構造器頭(Head)* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [聲明修飾符集](./06_Declarations.md#declaration-modifiers)<sub>可選</sub> **init**
>
> *構造器頭(Head)* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [聲明修飾符集](./06_Declarations.md#declaration-modifiers)<sub>可選</sub> **init ?**
>
> *構造器頭(Head)* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [聲明修飾符集](./06_Declarations.md#declaration-modifiers)<sub>可選</sub> **init !**
>
> *構造器主體* → [代碼塊](./06_Declarations.md#code-block)
>
<!-- -->
> 析構器聲明語法
>
> *析構器聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> **deinit** [代碼塊](./06_Declarations.md#code-block)
>
<!-- -->
> 擴展聲明語法
>
> *擴展聲明* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [訪問級別修飾符](./07_Attributes.md#access-level-modifier)<sub>可選</sub> **extension** [類型標識](./03_Types.md#type-identifier) [類型繼承子句](./03_Types.md#type-inheritance-clause)<sub>可選</sub> [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [擴展主體](./06_Declarations.md#extension-body)
>
> *擴展主體* → **{** [擴展成員集](./06_Declarations.md#declarations)<sub>可選</sub> **}**
>
> *擴展成員集* → [擴展成員](./06_Declarations.md#declarations) [擴展成員集](./06_Declarations.md#declarations)<sub>可選</sub>
>
> *擴展成員* → [聲明集](./06_Declarations.md#declarations) | [編譯控制語句](./05_Statements.md#compiler-control-statement)
>
<!-- -->
> 下標聲明語法
>
> *下標聲明* → [下標頭](./06_Declarations.md#subscript-head) [下標結果](./06_Declarations.md#subscript-result) [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [代碼塊](./06_Declarations.md#code-block)
>
> *下標聲明* → [下標頭](./06_Declarations.md#subscript-head) [下標結果](./06_Declarations.md#subscript-result) [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [getter-setter 塊](./06_Declarations.md#getter-setter-block)
>
> *下標聲明* → [下標頭](./06_Declarations.md#subscript-head) [下標結果](./06_Declarations.md#subscript-result) [泛型 where 子句](./09_Generic_Parameters_and_Arguments.md#generic-where-clause)<sub>可選</sub> [getter-setter 關鍵字塊](./06_Declarations.md#getter-setter-keyword-block)
>
> *下標頭(Head)* → [特性](./07_Attributes.md#attributes)<sub>可選</sub> [聲明修飾符集](./06_Declarations.md#declaration-modifiers)<sub>可選</sub> **subscript** [泛型參數子句](./09_Generic_Parameters_and_Arguments.md#generic-parameter-clause)<sub>可選</sub> [參數子句](./06_Declarations.md#parameter-clause)
>
> *下標結果(Result)* → **->** [特性](./07_Attributes.md#attributes)<sub>可選</sub> [類型](./03_Types.md#type)
>
<!-- -->
> 運算符聲明語法
>
> *運算符聲明* → [前置運算符聲明](./06_Declarations.md#prefix-operator-declaration) | [后置運算符聲明](./06_Declarations.md#postfix-operator-declaration) | [中置運算符聲明](./06_Declarations.md#infix-operator-declaration)
>
> *前置運算符聲明* → **prefix** **operator** [運算符](./02_Lexical_Structure.md#operator)
>
> *后置運算符聲明* → **postfix** **operator** [運算符](./02_Lexical_Structure.md#operator)
>
> *中置運算符聲明* → **infix** **operator** [運算符](./02_Lexical_Structure.md#operator) [中置運算符特性](./06_Declarations.md#infix-operator-attributes)<sub>可選</sub>
>
> *中置運算符特性* → [優先級組名](./06_Declarations.md#precedence-group-name)
>
> 優先級組聲明語法
>
> *優先級組聲明* → **precedencegroup** [優先級組名](./06_Declarations.md#precedence-group-name) **{** [優先級組特性](./06_Declarations.md#precedence-group-attributes)<sub>可選</sub> **}**
>
> *優先級組特性* → [優先級組屬性](./06_Declarations.md#declarations) [優先級組特性](./06_Declarations.md#declarations)<sub>可選</sub>
>
> *優先級組屬性* → [優先級組關系](./06_Declarations.md#declarations)
>
> *優先級組屬性* → [優先級組賦值](./06_Declarations.md#declarations)
>
> *優先級組屬性* → [優先級組結合](./06_Declarations.md#declarations)
>
> *優先級組關系* → **higherThan :** [優先級組名集](./06_Declarations.md#declarations)
>
> *優先級組關系* → **lowerThan :** [優先級組名集](./06_Declarations.md#declarations)
>
> *優先級組賦值* → **assignment :** [布爾字面量](./02_Lexical_Structure.md#string-literal)
>
> *優先級組結合* → **associativity : left**
>
> *優先級組結合* → **associativity : right**
>
> *優先級組結合* → **associativity : none**
>
> *優先級組名集* → [優先級組名](./06_Declarations.md#declarations) | [優先級組名](./06_Declarations.md#declarations) **,** [優先級組名集](./06_Declarations.md#declarations)
>
> *優先級組名* → [標識符](./02_Lexical_Structure.md#identifier)
>
<!-- -->
> 聲明修飾符語法
>
> *聲明修飾符* → **class** | **convenience** | **dynamic** | **final** | **infix** | **lazy** | **optional** | **override** | **postfix** | **prefix** | **required** | **static** | **unowned** | **unowned(safe)** | **unowned(unsafe)** | **weak**
>
> *聲明修飾符* → [訪問級別修飾符](./07_Attributes.md#access-level-modifier)
>
> *聲明修飾符* → [可變性修飾符](./07_Attributes.md#mutation-modifier)
>
> *聲明修飾符集* → [聲明修飾符](./06_Declarations.md#declaration-modifier) [聲明修飾符集](./06_Declarations.md#declaration-modifiers)<sub>可選</sub>
>
> *訪問級別修飾符* → **private** | **private(set)**
>
> *訪問級別修飾符* → **fileprivate** | **fileprivate(set)**
>
> *訪問級別修飾符* → **internal** | **internal(set)**
>
> *訪問級別修飾符* → **public** | **public(set)**
>
> *訪問級別修飾符* → **open** | **open(set)**
>
> *可變性修飾符* → **mutating** | **nonmutating**
>
## 屬性 {#attributes}
> 屬性語法
>
> *屬性* → **@** [屬性名](./07_Attributes.md#attribute-name) [屬性參數子句](./07_Attributes.md#attribute-argument-clause)<sub>可選</sub>
>
> *屬性名* → [標識符](./02_Lexical_Structure.md#identifier)
>
> *屬性參數子句* → **{** [平衡令牌集](./07_Attributes.md#balanced-tokens)<sub>可選</sub> **}**
>
> *屬性(Attributes)集* → [屬性](./07_Attributes.md#attribute) [特性](./07_Attributes.md#attributes)<sub>可選</sub>
>
> *平衡令牌集* → [平衡令牌](./07_Attributes.md#balanced-token) [平衡令牌集](./07_Attributes.md#balanced-tokens)<sub>可選</sub>
>
> *平衡令牌* → **(** [平衡令牌集](./07_Attributes.md#balanced-tokens)<sub>可選</sub> **)**
>
> *平衡令牌* → **[** [平衡令牌集](./07_Attributes.md#balanced-tokens)<sub>可選</sub> **]**
>
> *平衡令牌* → **{** [平衡令牌集](./07_Attributes.md#balanced-tokens)<sub>可選</sub> **}**
>
> *平衡令牌* → 任意標識符、關鍵字、字面量或運算符
>
> *平衡令牌* → 除 **(** 、**)**、**[**、**]**、**{**、**}** 外的任意標點符號
>
>
## 模式 {#patterns}
> 模式語法
>
> *模式* → [通配符模式](./08_Patterns.md#wildcard-pattern) [類型注解](./03_Types.md#type-annotation)<sub>可選</sub>
>
> *模式* → [標識符模式](./08_Patterns.md#identifier-pattern) [類型注解](./03_Types.md#type-annotati Value Bindingon )<sub>可選</sub>
>
> *模式* → [值綁定模式](./08_Patterns.md#value-binding-pattern)
>
> *模式* → [元組模式](./08_Patterns.md#tuple-pattern) [類型注解](./03_Types.md#type-annotation)<sub>可選</sub>
>
> *模式* → [枚舉 case 模式](./08_Patterns.md#enum-case-pattern)
>
> *模式* → [可選模式](./08_Patterns.md#optional-pattern)
>
> *模式* → [類型轉換模式](./08_Patterns.md#type-casting-pattern)
>
> *模式* → [表達式模式](./08_Patterns.md#expression-pattern)
>
<!-- -->
> 通配符模式語法
>
> *通配符模式* → **_**
>
<!-- -->
> 標識符模式語法
>
> *標識符模式* → [標識符](./02_Lexical_Structure.md#identifier)
>
<!-- -->
> 值綁定模式語法
>
> *值綁定模式* → **var** [模式](./08_Patterns.md#pattern) | **let** [模式](./08_Patterns.md#pattern)
>
<!-- -->
> 元組模式語法
>
> *元組模式* → **(** [元組模式元素集](./08_Patterns.md#tuple-pattern-element-list)<sub>可選</sub> **)**
>
> *元組模式元素集* → [元組模式元素](./08_Patterns.md#tuple-pattern-element) | [元組模式元素](./08_Patterns.md#tuple-pattern-element) **,** [元組模式元素集](./08_Patterns.md#tuple-pattern-element-list)
>
> *元組模式元素* → [模式](./08_Patterns.md#pattern) | [標識符](./02_Lexical_Structure.md#identifier) **:** [模式](./08_Patterns.md#pattern)
>
<!-- -->
> 枚舉 case 模式語法
>
> *enum-case-pattern* → [類型標識](./03_Types.md#type-identifier)<sub>可選</sub> **.** [枚舉 case 名](./06_Declarations.md#enum-case-name) [元組模式](./08_Patterns.md#tuple-pattern)<sub>可選</sub>
>
<!-- -->
> 可選模式語法
>
> *可選模式* → [標識符模式](./02_Lexical_Structure.md#identifier) **?**
>
<!-- -->
> 類型轉換模式語法
>
> *類型轉換模式* → [is 模式](./08_Patterns.md#is-pattern) | [as 模式](./08_Patterns.md#as-pattern)
>
> *is 模式* → **is** [類型](./03_Types.md#type)
>
> *as 模式* → [模式](./08_Patterns.md#pattern) **as** [類型](./03_Types.md#type)
>
<!-- -->
> 表達式模式語法
>
> *表達式模式* → [表達式](./04_Expressions.md#expression)
>
## 泛型參數 {#generic-parameters-and-arguments}
> 泛型形參子句語法
>
>
> *泛型參數子句* → **<** [泛型參數集](./09_Generic_Parameters_and_Arguments.md#generic-parameter-list) **>**
>
> *泛型參數集* → [泛型參數](./09_Generic_Parameters_and_Arguments.md#generic-parameter) | [泛形參數](./09_Generic_Parameters_and_Arguments.md#generic-parameter) **,** [泛型參數集](./09_Generic_Parameters_and_Arguments.md#generic-parameter-list)
>
> *泛形參數* → [類型名稱](./03_Types.md#type-name)
>
> *泛形參數* → [類型名稱](./03_Types.md#type-name) **:** [類型標識](./03_Types.md#type-identifier)
>
> *泛形參數* → [類型名稱](./03_Types.md#type-name) **:** [協議合成類型](./03_Types.md#protocol-composition-type)
>
> *泛型 where 子句* → **where** [約束集](./09_Generic_Parameters_and_Arguments.md#requirement-list)
>
> *約束集* → [約束](./09_Generic_Parameters_and_Arguments.md#requirement) | [約束](./09_Generic_Parameters_and_Arguments.md#requirement) **,** [約束集](./09_Generic_Parameters_and_Arguments.md#requirement-list)
>
> *約束* → [一致性約束](./09_Generic_Parameters_and_Arguments.md#conformance-requirement) | [同類型約束](./09_Generic_Parameters_and_Arguments.md#same-type-requirement)
>
> *一致性約束* → [類型標識](./03_Types.md#type-identifier) **:** [類型標識](./03_Types.md#type-identifier)
>
> *一致性約束* → [類型標識](./03_Types.md#type-identifier) **:** [協議合成類型](./03_Types.md#protocol-composition-type)
>
> *同類型約束* → [類型標識](./03_Types.md#type-identifier) **==** [類型](./03_Types.md#type-identifier)
>
<!-- -->
> 泛型實參子句語法
>
> *泛型實參子句* → **<** [泛型實參集](./09_Generic_Parameters_and_Arguments.md#generic-argument-list) **>**
>
> *泛型實參集* → [泛型實參](./09_Generic_Parameters_and_Arguments.md#generic-argument) | [泛形實參](./09_Generic_Parameters_and_Arguments.md#generic-argument) **,** [泛型實參集](./09_Generic_Parameters_and_Arguments.md#generic-argument-list)
>
> *泛形實參* → [類型](./03_Types.md#type)
- 1.關于 Swift
- 2.Swift 初見
- 2-1基礎部分
- 2-2基本運算符
- 2-3字符串和字符
- 2-4集合類型
- 2-5控制流
- 2-6函數
- 2-7閉包
- 2-8枚舉
- 2-9類和結構體
- 2-10屬性
- 2-11方法
- 2-12下標
- 2-13繼承
- 2-14構造過程
- 2-15析構過程
- 2-16可選鏈
- 2-17錯誤處理
- 2-18類型轉換
- 2-19嵌套類型
- 2-20擴展
- 2-21協議
- 2-22泛型
- 2-23不透明類型
- 2-24自動引用計數
- 2-25內存安全
- 2-26訪問控制
- 2-27高級運算符
- 3-1關于語言參考
- 3-2詞法結構
- 3-3類型
- 3-4表達式
- 3-5語句
- 3-6聲明
- 3-7特性
- 3-8模式
- 3-9泛型參數
- 4語法總結