Swift學習之每日一tip (2)詞法結構

語言參考:

“箭頭(→)用來標記語法產式,可以被理解爲“可以包含”。”
“選擇性的語法產式由豎線(|)分隔。當可選用的語法產式太多時,爲了閱讀方便,它們將被拆分爲多行語法產式規則。”

註釋:

“註釋(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、COLUMNFILEFUNCTIONLINE

特定上下文中被保留的關鍵字: 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>> 中沒有必要添加空白來消除閉合字符 > 的歧義。在這個例子中, 閉合字符 > 被看作單字符標記,而不會被誤解爲移位運算符 >>。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章