語言參考:
“箭頭(→)用來標記語法產式,可以被理解爲“可以包含”。”
“選擇性的語法產式由豎線(|)分隔。當可選用的語法產式太多時,爲了閱讀方便,它們將被拆分爲多行語法產式規則。”
註釋:
“註釋(comments)被編譯器當作空白處理。單行註釋由 // 開始直到該行結束。多行註釋由 /* 開始,以 */ 結束。可以嵌套註釋,但注意註釋標記必須匹配。
”
標識符:
標識符(identifiers)可以由以下的字符開始:大寫或小寫的字母 A 到 Z、下劃線 _、基本多語言面(Basic Multilingual Plane)中的 Unicode 非組合字符以及基本多語言面以外的非專用區(Private Use Area)字符。首字符之後,標識符允許使用數字和 Unicode 字符組合。
使用保留字(reserved word)作爲標識符,需要在其前後增加反引號 `。例如,class 不是合法的標識符,但可以使用 `class`。反引號不屬於標識符的一部分,`x` 和 x 表示同一標識符。
閉包
(closure)中如果沒有明確指定參數名稱,參數將被隱式命名爲 $0、$1、$2...
這些命名在閉包作用域內是合法的標識符。
關鍵字:
“被保留的關鍵字(keywords)不允許用作標識符,除非被反引號轉義,參見 標識符。”
用作聲明的關鍵字: class、deinit、enum、extension、func、import、init、let、protocol、static、struct、subscript、typealias、var
用作語句的關鍵字: break、case、continue、default、do、else、fallthrough、if、in、for、return、switch、where、while
用作表達和類型的關鍵字: as、dynamicType、is、new、super、self、Self、Type、COLUMN、FILE、FUNCTION、LINE
特定上下文中被保留的關鍵字: associativity、didSet、get、infix、inout、left、mutating、none、nonmutating、operator、override、postfix、 precedence、prefix、right、set、unowned、unowned(safe)、unowned(unsafe)、weak、willSet,[…]
整型字面量:
“整型字面量默認用十進制表示,可以加前綴來指定其他的進制,二進制
字面量加0b
,八進制
字面量加 0o
,十六進制
字面量加 0x
。”
允許使用下劃線 _ 來增加數字的可讀性,下劃線不會影響字面量的值。整型字面量也可以在數字前加 0,同樣不會影響字面量的值。
1000_000 // 等於 1000000
005 // 等於 5
浮點字面值:
指數部分由大寫或小寫字母 p 後跟十進制數字串組成,這串數字表示 p 之前的數量乘以 2 的幾次方。
例如:0xFp2 表示 15 ⨉ 2^2,也就是 60;同樣,0xFp-2 表示 15 ⨉ 2^-2,也就是 3.75。”
“負的浮點型字面量由一元運算符減號 - 和浮點型字面量組成,例如 -42.0。這代表一個表達式
,而不是一個浮點整型字面量。”
文本型字面值:
文本型字面量中不能包含未轉義的雙引號 “、未轉義的反斜線\、回車符(carriage return)或換行符(line feed)。
可以在文本型字面量中使用的轉義特殊符號如下:
空字符(Null Character)\0
反斜線(Backslash)\
水平 Tab (Horizontal Tab)\t
換行符(Line Feed)\n
回車符(Carriage Return)\r
雙引號(Double Quote)\”
單引號(Single Quote)\’
字符也可以用以下方式表示:
\x 後跟兩位十六進制數字
\u 後跟四位十六進制數字
\U 後跟八位十六進制數字
後跟的數字表示一個 Unicode 碼點。
文本型字面量允許在反斜線小括號 \() 中插入表達式的值。插入表達式(interpolated expression)不能包含未[…]
運算符:
“運算符由一個或多個以下字符組成: /、=、-、+、!、、%、<、>、&、|、^、~、.。也就是說,標記 =, ->、//、/、*/、. 以及一元前綴運算符 & 屬於保留字,這些標記不能被重寫或用於自定義運算符。”
運算符前的字符 (、[ 和 { ;運算符後的字符 )、] 和 } 以及字符 ,、; 和 : 都將用於空白檢測。
以上規則需注意一點,如果運算符 ! 或 ? 左側沒有空白,則不管右側是否有空白都將被看作後綴運算符。如果將 ? 用作可選類型(optional type)修飾,左側必須無空白。如果用於條件運算符 ? :,必須兩側都有空白
。
在特定構成中 ,以 < 或 > 開頭的運算符會被分離成兩個或多個標記,剩餘部分以同樣的方式會被再次分離。因此,在 Dictionary<String, Array<Int>> 中
沒有必要添加空白來消除閉合字符 > 的歧義。在這個例子中, 閉合字符 > 被看作單字符標記,而不會被誤解爲移位運算符 >>。