翻譯: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 < 協議標識符列表 可選 >
協議標識符列表 → 協議標識符 | 協議標識符 , 協議標識符列表
協議標識符 → 類型標識