翻譯:stanzhai 校對:xielingwang
語法總結
本頁包含內容:
- 語句(Statements)
- 泛型參數(Generic Parameters and Arguments)
- 宣告(Declarations)
- 模式(Patterns)
- 特性(Attributes)
- 表達式(Expressions)
- 詞法結構(Lexical Structure)
- 型別(Types)
語句
語句語法
語句 → 表達式 ; 可選
語句 → 宣告 ; 可選
語句 → 迴圈語句 ; 可選
語句 → 分支語句 ; 可選
語句 → 標記語句(Labeled Statement)
語句 → 控制轉移語句 ; 可選
多條語句(Statements) → 語句 多條語句(Statements) 可選
迴圈語句語法
迴圈語句 → for語句
迴圈語句 → for-in語句
迴圈語句 → while語句
迴圈語句 → do-while語句
For 迴圈語法
for語句 → for for初始條件 可選 ; 表達式 可選 ; 表達式 可選 程式碼區塊
for語句 → for ( for初始條件 可選 ; 表達式 可選 ; 表達式 可選 ) 程式碼區塊
for初始條件 → 變數宣告 | 表達式列表
If語句語法
if語句 → if if條件 程式碼區塊 else子句(Clause) 可選
if條件 → 表達式 | 宣告
else子句(Clause) → else 程式碼區塊 | else if語句
Switch語句語法
switch語句 → switch 表達式 { SwitchCase列表 可選 }
SwitchCase列表 → SwitchCase SwitchCase列表 可選
SwitchCase → case標簽 多條語句(Statements) | default標簽 多條語句(Statements)
SwitchCase → case標簽 ; | default標簽 ;
case標簽 → case case項列表 :
case項列表 → 模式 guard-clause 可選 | 模式 guard-clause 可選 , case項列表
default標簽 → default :
guard-clause → where guard-expression
guard-expression → 表達式
標記語句語法
標記語句(Labeled Statement) → 語句標簽 迴圈語句 | 語句標簽 switch語句
語句標簽 → 標簽名稱 :
標簽名稱 → 識別符號
控制傳遞語句(Control Transfer Statement) 語法
控制傳遞語句 → break語句
控制傳遞語句 → continue語句
控制傳遞語句 → fallthrough語句
控制傳遞語句 → return語句
Break 語句語法
break語句 → break 標簽名稱 可選
Continue 語句語法
continue語句 → continue 標簽名稱 可選
Fallthrough 語句語法
fallthrough語句 → fallthrough
Return 語句語法
return語句 → return 表達式 可選
泛型參數
泛型形參子句(Generic Parameter Clause) 語法
泛型參數子句 → < 泛型參數列表 約束子句 可選 >
泛型參數列表 → 泛形參數 | 泛形參數 , 泛型參數列表
泛形參數 → 型別名稱
泛形參數 → 型別名稱 : 型別標識
泛形參數 → 型別名稱 : 協定合成型別
約束子句 → where 約束列表
約束列表 → 約束 | 約束 , 約束列表
約束 → 一致性約束 | 同型別約束
一致性約束 → 型別標識 : 型別標識
一致性約束 → 型別標識 : 協定合成型別
同型別約束 → 型別標識 == 型別標識
泛型實參子句語法
(泛型參數子句Generic Argument Clause) → < 泛型參數列表 >
泛型參數列表 → 泛型參數 | 泛型參數 , 泛型參數列表
泛型參數 → 型別
宣告 (Declarations)
宣告語法
宣告 → 導入宣告
宣告 → 常數宣告
宣告 → 變數宣告
宣告 → 型別別名宣告
宣告 → 函式宣告
宣告 → 列舉宣告
宣告 → 結構宣告
宣告 → 類別宣告
宣告 → 協定宣告
宣告 → 建構器宣告
宣告 → 析構器宣告
宣告 → 擴展宣告
宣告 → 下標腳本宣告
宣告 → 運算子宣告
宣告(Declarations)列表 → 宣告 宣告(Declarations)列表 可選
宣告描述符(Specifiers)列表 → 宣告描述符(Specifier) 宣告描述符(Specifiers)列表 可選
宣告描述符(Specifier) → class | mutating | nonmutating | override | static | unowned | unowned(safe) | unowned(unsafe) | weak
頂級(Top Level) 宣告語法
頂級宣告 → 多條語句(Statements) 可選
程式碼區塊語法
程式碼區塊 → { 多條語句(Statements) 可選 }
導入(Import)宣告語法
導入宣告 → 特性(Attributes)列表 可選 import 導入型別 可選 導入路徑
導入型別 → typealias | struct | class | enum | protocol | var | func
導入路徑 → 導入路徑識別符號 | 導入路徑識別符號 . 導入路徑
導入路徑識別符號 → 識別符號 | 運算子
常數宣告語法
常數宣告 → 特性(Attributes)列表 可選 宣告描述符(Specifiers)列表 可選 let 模式建構器列表
模式建構器列表 → 模式建構器 | 模式建構器 , 模式建構器列表
模式建構器 → 模式 建構器 可選
建構器 → = 表達式
變數宣告語法
變數宣告 → 變數宣告頭(Head) 模式建構器列表
變數宣告 → 變數宣告頭(Head) 變數名 型別注解 程式碼區塊
變數宣告 → 變數宣告頭(Head) 變數名 型別注解 getter-setter塊
變數宣告 → 變數宣告頭(Head) 變數名 型別注解 getter-setter關鍵字(Keyword)塊
變數宣告 → 變數宣告頭(Head) 變數名 型別注解 建構器 可選 willSet-didSet程式碼區塊
變數宣告頭(Head) → 特性(Attributes)列表 可選 宣告描述符(Specifiers)列表 可選 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) → typealias 型別別名名稱
型別別名名稱 → 識別符號
型別別名賦值 → = 型別
函式宣告語法
函式宣告 → 函式頭 函式名 泛型參數子句 可選 函式簽名(Signature) 函式體
函式頭 → 特性(Attributes)列表 可選 宣告描述符(Specifiers)列表 可選 func
函式名 → 識別符號 | 運算子
函式簽名(Signature) → parameter-clauses 函式結果 可選
函式結果 → -> 特性(Attributes)列表 可選 型別
函式體 → 程式碼區塊
parameter-clauses → 參數子句 parameter-clauses 可選
參數子句 → ( ) | ( 參數列表 ... 可選 )
參數列表 → 參數 | 參數 , 參數列表
參數 → inout 可選 let 可選 # 可選 參數名 本地參數名 可選 型別注解 預設參數子句 可選
參數 → inout 可選 var # 可選 參數名 本地參數名 可選 型別注解 預設參數子句 可選
參數 → 特性(Attributes)列表 可選 型別
參數名 → 識別符號 | _
本地參數名 → 識別符號 | _
預設參數子句 → = 表達式
列舉宣告語法
列舉宣告 → 特性(Attributes)列表 可選 聯合式列舉 | 特性(Attributes)列表 可選 原始值式列舉
聯合式列舉 → 列舉名 泛型參數子句 可選 { union-style-enum-members 可選 }
union-style-enum-members → union-style-enum-member union-style-enum-members 可選
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名 → 識別符號
原始值式列舉 → 列舉名 泛型參數子句 可選 : 型別標識 { 原始值式列舉成員列表 可選 }
原始值式列舉成員列表 → 原始值式列舉成員 原始值式列舉成員列表 可選
原始值式列舉成員 → 宣告 | 原始值式列舉case子句
原始值式列舉case子句 → 特性(Attributes)列表 可選 case 原始值式列舉case列表
原始值式列舉case列表 → 原始值式列舉case | 原始值式列舉case , 原始值式列舉case列表
原始值式列舉case → 列舉的case名 原始值賦值 可選
原始值賦值 → = 字面量
結構宣告語法
結構宣告 → 特性(Attributes)列表 可選 struct 結構名稱 泛型參數子句 可選 型別繼承子句 可選 結構主體
結構名稱 → 識別符號
結構主體 → { 宣告(Declarations)列表 可選 }
類別宣告語法
類別宣告 → 特性(Attributes)列表 可選 class 類別名 泛型參數子句 可選 型別繼承子句 可選 類別主體
類別名 → 識別符號
類別主體 → { 宣告(Declarations)列表 可選 }
協定(Protocol)宣告語法
協定宣告 → 特性(Attributes)列表 可選 protocol 協定名 型別繼承子句 可選 協定主體
協定名 → 識別符號
協定主體 → { 協定成員宣告(Declarations)列表 可選 }
協定成員宣告 → 協定屬性宣告
協定成員宣告 → 協定方法宣告
協定成員宣告 → 協定建構器宣告
協定成員宣告 → 協定下標腳本宣告
協定成員宣告 → 協定關聯型別宣告
協定成員宣告(Declarations)列表 → 協定成員宣告 協定成員宣告(Declarations)列表 可選
協定屬性宣告語法
協定屬性宣告 → 變數宣告頭(Head) 變數名 型別注解 getter-setter關鍵字(Keyword)塊
協定方法宣告語法
協定方法宣告 → 函式頭 函式名 泛型參數子句 可選 函式簽名(Signature)
協定建構器宣告語法
協定建構器宣告 → 建構器頭(Head) 泛型參數子句 可選 參數子句
協定下標腳本宣告語法
協定下標腳本宣告 → 下標腳本頭(Head) 下標腳本結果(Result) getter-setter關鍵字(Keyword)塊
協定關聯型別宣告語法
協定關聯型別宣告 → 型別別名頭(Head) 型別繼承子句 可選 型別別名賦值 可選
建構器宣告語法
建構器宣告 → 建構器頭(Head) 泛型參數子句 可選 參數子句 建構器主體
建構器頭(Head) → 特性(Attributes)列表 可選 convenience 可選 init
建構器主體 → 程式碼區塊
析構器宣告語法
析構器宣告 → 特性(Attributes)列表 可選 deinit 程式碼區塊
擴展(Extension)宣告語法
擴展宣告 → extension 型別標識 型別繼承子句 可選 extension-body
extension-body → { 宣告(Declarations)列表 可選 }
下標腳本宣告語法
下標腳本宣告 → 下標腳本頭(Head) 下標腳本結果(Result) 程式碼區塊
下標腳本宣告 → 下標腳本頭(Head) 下標腳本結果(Result) getter-setter塊
下標腳本宣告 → 下標腳本頭(Head) 下標腳本結果(Result) getter-setter關鍵字(Keyword)塊
下標腳本頭(Head) → 特性(Attributes)列表 可選 subscript 參數子句
下標腳本結果(Result) → -> 特性(Attributes)列表 可選 型別
運算子宣告語法
運算子宣告 → 前綴運算子宣告 | 後綴運算子宣告 | 中綴運算子宣告
前綴運算子宣告 → 運算子 prefix 運算子 { }
後綴運算子宣告 → 運算子 postfix 運算子 { }
中綴運算子宣告 → 運算子 infix 運算子 { 中綴運算子屬性 可選 }
中綴運算子屬性 → 優先級子句 可選 結和性子句 可選
優先級子句 → precedence 優先級水平
優先級水平 → 數值 0 到 255
結和性子句 → associativity 結和性
結和性 → left | right | none
模式
模式(Patterns) 語法
模式 → 通配符模式 型別注解 可選
模式 → 識別符號模式 型別注解on) 可選
模式 → 值綁定模式
模式 → 元組模式 型別注解 可選
模式 → enum-case-pattern
模式 → type-casting-pattern
模式 → 表達式模式
通配符模式語法
通配符模式 → _
識別符號模式語法
識別符號模式 → 識別符號
元組模式語法
元組模式 → ( 元組模式元素列表 可選 )
元組模式元素列表 → 元組模式元素 | 元組模式元素 , 元組模式元素列表
元組模式元素 → 模式
型別轉換模式語法
type-casting-pattern → is模式 | as模式
is模式 → is 型別
as模式 → 模式 as 型別
表達式模式語法
表達式模式 → 表達式
特性
特性語法
特色 → @ 特性名 特性參數子句 可選
特性名 → 識別符號
特性參數子句 → ( 平衡語彙單元列表 可選 )
特性(Attributes)列表 → 特色 特性(Attributes)列表 可選
平衡語彙單元列表 → 平衡語彙單元 平衡語彙單元列表 可選
平衡語彙單元 → ( 平衡語彙單元列表 可選 )
平衡語彙單元 → [ 平衡語彙單元列表 可選 ]
平衡語彙單元 → { 平衡語彙單元列表 可選 }
平衡語彙單元 → 任意識別符號, 關鍵字, 字面量或運算子
平衡語彙單元 → 任意標點除了(, ), [, ], {, 或 }
表達式
前綴表達式語法
前綴表達式 → 前綴運算子 可選 後綴表達式
前綴表達式 → 寫入寫出(in-out)表達式
寫入寫出(in-out)表達式 → & 識別符號
二元表達式語法
二元表達式 → 二元運算子 前綴表達式
二元表達式 → 賦值運算子 前綴表達式
二元表達式 → 條件運算子 前綴表達式
二元表達式 → 型別轉換運算子
二元表達式列表 → 二元表達式 二元表達式列表 可選
賦值運算子語法
賦值運算子 → =
三元條件運算子語法
三元條件運算子 → ? 表達式 :
主表達式語法
主表達式 → 識別符號 泛型參數子句 可選
主表達式 → 字面量表達式
主表達式 → 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) → 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)
識別符號字元列表 → 識別符號字元 識別符號字元列表 可選
隱式參數名 → $ 十進制數字列表
整型字面量語法
整型字面量 → 二進制字面量
整型字面量 → 八進制字面量
整型字面量 → 十進制字面量
整型字面量 → 十六進制字面量
二進制字面量 → 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 | \" | \'
跳脫字元 → \x 十六進制數字 十六進制數字
跳脫字元 → \u 十六進制數字 十六進制數字 十六進制數字 十六進制數字
跳脫字元 → \U 十六進制數字 十六進制數字 十六進制數字 十六進制數字 十六進制數字 十六進制數字 十六進制數字 十六進制數字
運算子語法語法
運算子 → 運算子字元 運算子 可選
運算子字元 → / | = | - | + | ! | * | % | < | > | & | | | ^ | ~ | .
二元運算子 → 運算子
前綴運算子 → 運算子
後綴運算子 → 運算子
型別
型別語法
型別 → 陣列型別 | 函式型別 | 型別標識 | 元組型別 | 可選型別 | 隱式解析可選型別 | 協定合成型別 | 元型型別
型別注解語法
型別注解 → : 特性(Attributes)列表 可選 型別
型別標識語法
型別標識 → 型別名稱 泛型參數子句 可選 | 型別名稱 泛型參數子句 可選 . 型別標識
類別名 → 識別符號
元組型別語法
元組型別 → ( 元組型別主體 可選 )
元組型別主體 → 元組型別的元素列表 ... 可選
元組型別的元素列表 → 元組型別的元素 | 元組型別的元素 , 元組型別的元素列表
元組型別的元素 → 特性(Attributes)列表 可選 inout 可選 型別 | inout 可選 元素名 型別注解
元素名 → 識別符號
可選型別語法
可選型別 → 型別 ?
隱式解析可選型別(Implicitly Unwrapped Optional Type)語法
隱式解析可選型別 → 型別 !
協定合成型別語法
協定合成型別 → protocol < 協定識別符號列表 可選 >
協定識別符號列表 → 協定識別符號 | 協定識別符號 , 協定識別符號列表
協定識別符號 → 型別標識