鍍金池/ 教程/ iOS/ 詞法結(jié)構(gòu)(Lexical Structure)
特性(Attributes)
Access Control 權(quán)限控制的黑與白
基本運(yùn)算符(Basic Operators)
基礎(chǔ)部分(The Basics)
閉包(Closures)
擴(kuò)展
泛型參數(shù)(Generic Parameters and Arguments)
訪問控制和 protected
語句(Statements)
模式(Patterns)
WWDC 里面的那個(gè)“大炮打氣球”
關(guān)于語言參考(About the Language Reference)
語法總結(jié)(Summary of the Grammar)
嵌套類型
類型(Types)
Swift 初見(A Swift Tour)
泛型
枚舉(Enumerations)
高級(jí)運(yùn)算符
繼承
析構(gòu)過程
關(guān)于 Swift(About Swift)
訪問控制
類和結(jié)構(gòu)體
內(nèi)存安全
Swift 與 C 語言指針友好合作
協(xié)議
屬性(Properties)
可選類型完美解決占位問題
錯(cuò)誤處理
字符串和字符(Strings and Characters)
聲明(Declarations)
自動(dòng)引用計(jì)數(shù)
Swift 里的值類型與引用類型
表達(dá)式(Expressions)
Swift 文檔修訂歷史
造個(gè)類型不是夢-白話 Swift 類型創(chuàng)建
歡迎使用 Swift
詞法結(jié)構(gòu)(Lexical Structure)
集合類型(Collection Types)
下標(biāo)
方法(Methods)
可選鏈?zhǔn)秸{(diào)用
版本兼容性
類型轉(zhuǎn)換
構(gòu)造過程
The Swift Programming Language 中文版
函數(shù)(Functions)
Swift 教程
控制流(Control Flow)

詞法結(jié)構(gòu)(Lexical Structure)


1.0 翻譯:superkam 校對:numbbbbb

2.0 翻譯+校對:buginux

2.1 翻譯:mmoaay

2.2 翻譯+校對:星夜暮晨

4.1 翻譯+校對:mylittleswift

本頁包含內(nèi)容:

Swift 的“詞法結(jié)構(gòu)(lexical structure)” 描述了能構(gòu)成該語言中有效符號(hào)(token)的字符序列。這些合法符號(hào)組成了語言中最底層的構(gòu)建基塊,并在之后的章節(jié)中用于描述語言的其他部分。一個(gè)合法符號(hào)由一個(gè)標(biāo)識(shí)符(identifier)、關(guān)鍵字(keyword)、標(biāo)點(diǎn)符號(hào)(punctuation)、字面量(literal)或運(yùn)算符(operator)組成。

通常情況下,通過考慮輸入文本當(dāng)中可能的最長子串,并且在隨后將介紹的語法約束之下,根據(jù)隨后將介紹的語法約束生成的,根據(jù) Swift 源文件當(dāng)中的字符來生成相應(yīng)的“符號(hào)”。這種方法稱為“最長匹配(longest match)”,或者“最大適合(maximal munch)”

空白與注釋

空白(whitespace)有兩個(gè)用途:分隔源文件中的符號(hào)以及幫助區(qū)分運(yùn)算符屬于前綴還是后綴(參見 運(yùn)算符),在其他情況下空白則會(huì)被忽略。以下的字符會(huì)被當(dāng)作空白:空格(U+0020)、換行符(U+000A)、回車符(U+000D)、水平制表符(U+0009)、垂直制表符(U+000B)、換頁符(U+000C)以及空字符(U+0000)。

注釋被編譯器當(dāng)作空白處理。單行注釋由 // 開始直至遇到換行符(U+000A)或者回車符(U+000D)。多行注釋由 /* 開始,以 */ 結(jié)束。注釋允許嵌套,但注釋標(biāo)記必須匹配。

空白語法

空白空白項(xiàng) 空白可選 空白項(xiàng)斷行符 空白項(xiàng)注釋 空白項(xiàng)多行注釋 空白項(xiàng) → U+0000,U+0009,U+000B,U+000C 或者 U+0020

斷行符 → U+000A 斷行符 → U+000D 斷行符 → U+000D 接著是 U+000A

注釋 → // [注釋內(nèi)容 斷行](#comment-text line-break) 多行注釋/* 多行注釋內(nèi)容 */ 注釋內(nèi)容注釋內(nèi)容項(xiàng) 注釋內(nèi)容可選 注釋內(nèi)容項(xiàng) → 任何 Unicode 標(biāo)量值, 除了 U+000A 或者 U+000D 多行注釋內(nèi)容多行注釋內(nèi)容項(xiàng) 多行注釋內(nèi)容可選 多行注釋內(nèi)容項(xiàng)多行注釋. 多行注釋內(nèi)容項(xiàng)注釋內(nèi)容項(xiàng) 多行注釋內(nèi)容項(xiàng) → 任何 Unicode 標(biāo)量值, 除了 /* 或者 */

注釋可以包含額外的格式和標(biāo)記,正如 Markup Formatting Reference 所述。

標(biāo)識(shí)符

標(biāo)識(shí)符(identifier) 可以由以下的字符開始:大寫或小寫的字母 AZ、下劃線(_)、基本多文種平面(Basic Multilingual Plane)中非字符數(shù)字組合的 Unicode 字符以及基本多文種平面以外的非個(gè)人專用區(qū)字符。在首字符之后,允許使用數(shù)字和組合 Unicode 字符。

使用保留字作為標(biāo)識(shí)符,需要在其前后增加反引號(hào)(`)。例如,class 不是合法的標(biāo)識(shí)符,但可以使用 `class`。反引號(hào)不屬于標(biāo)識(shí)符的一部分,`x`x 表示同一標(biāo)識(shí)符。

閉包中如果沒有明確指定參數(shù)名稱,參數(shù)將被隱式命名為 $0、$1$2 等等。這些命名在閉包作用域范圍內(nèi)是合法的標(biāo)識(shí)符。

標(biāo)識(shí)符語法

標(biāo)識(shí)符頭部標(biāo)識(shí)符 標(biāo)識(shí)符字符組可選 標(biāo)識(shí)符 → `頭部標(biāo)識(shí)符 標(biāo)識(shí)符字符組可選` 標(biāo)識(shí)符隱式參數(shù)名

標(biāo)識(shí)符列表標(biāo)識(shí)符 | 標(biāo)識(shí)符 , 標(biāo)識(shí)符列表

頭部標(biāo)識(shí)符 → 大寫或小寫字母 A - Z 頭部標(biāo)識(shí)符 → _ 頭部標(biāo)識(shí)符 → U+00A8,U+00AA,U+00AD,U+00AF,U+00B2–U+00B5,或者 U+00B7–U+00BA 頭部標(biāo)識(shí)符 → U+00BC–U+00BE,U+00C0–U+00D6,U+00D8–U+00F6,或者 U+00F8–U+00FF 頭部標(biāo)識(shí)符 → U+0100–U+02FF,U+0370–U+167F,U+1681–U+180D,或者 U+180F–U+1DBF 頭部標(biāo)識(shí)符 → U+1E00–U+1FFF 頭部標(biāo)識(shí)符 → U+200B–U+200D,U+202A–U+202E,U+203F–U+2040,U+2054,或者 U+2060–U+206F 頭部標(biāo)識(shí)符 → U+2070–U+20CF,U+2100–U+218F,U+2460–U+24FF,或者 U+2776–U+2793 頭部標(biāo)識(shí)符 → U+2C00–U+2DFF 或者 U+2E80–U+2FFF 頭部標(biāo)識(shí)符 → U+3004–U+3007,U+3021–U+302F,U+3031–U+303F,或者 U+3040–U+D7FF 頭部標(biāo)識(shí)符 → U+F900–U+FD3D,U+FD40–U+FDCF,U+FDF0–U+FE1F,或者 U+FE30–U+FE44 頭部標(biāo)識(shí)符 → U+FE47–U+FFFD 頭部標(biāo)識(shí)符 → U+10000–U+1FFFD,U+20000–U+2FFFD,U+30000–U+3FFFD,或者 U+40000–U+4FFFD 頭部標(biāo)識(shí)符 → U+50000–U+5FFFD,U+60000–U+6FFFD,U+70000–U+7FFFD,或者 U+80000–U+8FFFD 頭部標(biāo)識(shí)符 → U+90000–U+9FFFD,U+A0000–U+AFFFD,U+B0000–U+BFFFD,或者 U+C0000–U+CFFFD 頭部標(biāo)識(shí)符 → U+D0000–U+DFFFD 或者 U+E0000–U+EFFFD

標(biāo)識(shí)符字符 → 數(shù)值 0 - 9 標(biāo)識(shí)符字符 → U+0300–U+036F,U+1DC0–U+1DFF,U+20D0–U+20FF,或者 U+FE20–U+FE2F 標(biāo)識(shí)符字符頭部標(biāo)識(shí)符 標(biāo)識(shí)符字符組標(biāo)識(shí)符字符 標(biāo)識(shí)符字符組可選

隱式參數(shù)名$ 十進(jìn)制數(shù)字列表

關(guān)鍵字和標(biāo)點(diǎn)符號(hào)

下面這些被保留的關(guān)鍵字不允許用作標(biāo)識(shí)符,除非使用反引號(hào)轉(zhuǎn)義,具體描述請參考 標(biāo)識(shí)符。除了 inoutvar 以及 let 之外的關(guān)鍵字可以用作某個(gè)函數(shù)聲明或者函數(shù)調(diào)用當(dāng)中的外部參數(shù)名,不用添加反引號(hào)轉(zhuǎn)義。

  • 用在聲明中的關(guān)鍵字: associatedtypeclass、deinitenum、extension、funcimport、init、inout、internal、letoperator、private、protocol、public、staticstruct、subscript、typealias 以及 var。
  • 用在語句中的關(guān)鍵字:break、casecontinue、default、defer、doelse、fallthroughfor、guard、if、in、repeat、return、switch、where 以及 while
  • 用在表達(dá)式和類型中的關(guān)鍵字:as、catch、dynamicType、false、is、nil、rethrows、super、self、Selfthrow、throws、true、try、#column、#file、#function 以及 #line。
  • 用在模式中的關(guān)鍵字:_。
  • 以井字號(hào)(#)開頭的關(guān)鍵字:#available、#column#else#elseif、#endif、#file、#function、#if、#line 以及 #selector。
  • 特定上下文中被保留的關(guān)鍵字: associativityconvenience、dynamic、didSet、final、get、infixindirect、lazy、leftmutating、none、nonmutating、optionaloverride、postfix、precedence、prefix、Protocolrequired、right、set、Typeunowned、weak 以及 willSet。這些關(guān)鍵字在特定上下文之外可以被用做標(biāo)識(shí)符。

以下符號(hào)被當(dāng)作保留符號(hào),不能用于自定義運(yùn)算符: (、)、{}、[、]、.、,、:、;、=、@#、&(作為前綴運(yùn)算符)、->、`?、!(作為后綴運(yùn)算符)。

字面量

字面量(literal) 用來表示源碼中某種特定類型的值,比如一個(gè)數(shù)字或字符串。

下面是字面量的一些示例:

42              // 整數(shù)字面量
3.14159         // 浮點(diǎn)數(shù)字面量
"Hello, world!" // 字符串字面量
true            // 布爾值字面量

字面量本身并不包含類型信息。事實(shí)上,一個(gè)字面量會(huì)被解析為擁有無限的精度,然后 Swift 的類型推導(dǎo)會(huì)嘗試去推導(dǎo)出這個(gè)字面量的類型。比如,在 let x: Int8 = 42 這個(gè)聲明中,Swift 使用了顯式類型標(biāo)注(: Int8)來推導(dǎo)出 42 這個(gè)整數(shù)字面量的類型是 Int8。如果沒有可用的類型信息, Swift 則會(huì)從標(biāo)準(zhǔn)庫中定義的字面量類型中推導(dǎo)出一個(gè)默認(rèn)的類型。整數(shù)字面量的默認(rèn)類型是 Int,浮點(diǎn)數(shù)字面量的默認(rèn)類型是 Double,字符串字面量的默認(rèn)類型是 String,布爾值字面量的默認(rèn)類型是 Bool。比如,在 let str = "Hello, world" 這個(gè)聲明中,字符串 "Hello, world" 的默認(rèn)推導(dǎo)類型就是 String。

當(dāng)為一個(gè)字面量值指定了類型標(biāo)注的時(shí)候,這個(gè)標(biāo)注的類型必須能通過這個(gè)字面量值實(shí)例化。也就是說,這個(gè)類型必須符合這些 Swift 標(biāo)準(zhǔn)庫協(xié)議中的一個(gè):整數(shù)字面量的 IntegerLiteralConvertible 協(xié)議、浮點(diǎn)數(shù)字面量的 FloatingPointLiteralConvertible 協(xié)議、字符串字面量的 StringLiteralConvertible 協(xié)議以及布爾值字面量的 BooleanLiteralConvertible 協(xié)議。比如,Int8 符合 IntegerLiteralConvertible 協(xié)議,因此它能在 let x: Int8 = 42 這個(gè)聲明中作為整數(shù)字面量 42 的類型標(biāo)注。

字面量語法

字面量數(shù)值字面量 | 字符串字面量 | 布爾值字面量 | nil 字面量

數(shù)值字面量-可選 整數(shù)字面量 | -可選 浮點(diǎn)數(shù)字面量 布爾值字面量true | false nil 字面量nil

整數(shù)字面量

整數(shù)字面量(Integer Literals) 表示未指定精度整數(shù)的值。整數(shù)字面量默認(rèn)用十進(jìn)制表示,可以加前綴來指定其他的進(jìn)制。二進(jìn)制字面量加 0b,八進(jìn)制字面量加 0o,十六進(jìn)制字面量加 0x。

十進(jìn)制字面量包含數(shù)字 09。二進(jìn)制字面量只包含 01,八進(jìn)制字面量包含數(shù)字 07,十六進(jìn)制字面量包含數(shù)字 09 以及字母 AF(大小寫均可)。

負(fù)整數(shù)的字面量在整數(shù)字面量前加負(fù)號(hào) -,比如 -42。

整型字面面可以使用下劃線(_)來增加數(shù)字的可讀性,下劃線會(huì)被系統(tǒng)忽略,因此不會(huì)影響字面量的值。同樣地,也可以在數(shù)字前加 0,這同樣也會(huì)被系統(tǒng)所忽略,并不會(huì)影響字面量的值。

除非特別指定,整數(shù)字面量的默認(rèn)推導(dǎo)類型為 Swift 標(biāo)準(zhǔn)庫類型中的 Int。Swift 標(biāo)準(zhǔn)庫還定義了其他不同長度以及是否帶符號(hào)的整數(shù)類型,請參考 整數(shù)。

整數(shù)字面量語法

整數(shù)字面量二進(jìn)制字面量 整數(shù)字面量八進(jìn)制字面量 整數(shù)字面量十進(jìn)制字面量 整數(shù)字面量十六進(jìn)制字面量

二進(jìn)制字面量0b 二進(jìn)制數(shù)字 二進(jìn)制字面量字符組可選 二進(jìn)制數(shù)字 → 數(shù)值 0 到 1 二進(jìn)制字面量字符二進(jìn)制數(shù)字 | _ 二進(jìn)制字面量字符組二進(jìn)制字面量字符 二進(jìn)制字面量字符組可選

八進(jìn)制字面量0o 八進(jìn)字?jǐn)?shù)字 八進(jìn)制字符組可選 八進(jìn)字?jǐn)?shù)字 → 數(shù)值 0 到 7 八進(jìn)制字符八進(jìn)字?jǐn)?shù)字 | _ 八進(jìn)制字符組八進(jìn)制字符 八進(jìn)制字符組可選

十進(jìn)制字面量十進(jìn)制數(shù)字 十進(jìn)制字符組可選 十進(jìn)制數(shù)字 → 數(shù)值 0 到 9 十進(jìn)制數(shù)字組十進(jìn)制數(shù)字 十進(jìn)制數(shù)字組可選 十進(jìn)制字符十進(jìn)制數(shù)字 | _ 十進(jìn)制字符組十進(jìn)制字符 十進(jìn)制字符組可選

十六進(jìn)制字面量0x 十六進(jìn)制數(shù)字 十六進(jìn)制字面量字符組可選 十六進(jìn)制數(shù)字 → 數(shù)值 0 到 9, 字母 a 到 f, 或 A 到 F 十六進(jìn)制字符十六進(jìn)制數(shù)字 | _ 十六進(jìn)制字面量字符組十六進(jìn)制字符 十六進(jìn)制字面量字符組可選

浮點(diǎn)數(shù)字面量

浮點(diǎn)數(shù)字面量(Floating-point literals) 表示未指定精度浮點(diǎn)數(shù)的值。

浮點(diǎn)數(shù)字面量默認(rèn)用十進(jìn)制表示(無前綴),也可以用十六進(jìn)制表示(加前綴 0x)。

十進(jìn)制浮點(diǎn)數(shù)字面量由十進(jìn)制數(shù)字串后跟小數(shù)部分或指數(shù)部分(或兩者皆有)組成。十進(jìn)制小數(shù)部分由小數(shù)點(diǎn)(.)后跟十進(jìn)制數(shù)字串組成。指數(shù)部分由大寫或小寫字母 e 為前綴后跟十進(jìn)制數(shù)字串組成,這串?dāng)?shù)字表示 e 之前的數(shù)量乘以 10 的幾次方。例如:1.25e2 表示 1.25 x 102,也就是 125.0;同樣,1.25e-2 表示 1.25 x 10ˉ2,也就是 0.0125。

十六進(jìn)制浮點(diǎn)數(shù)字面量由前綴 0x 后跟可選的十六進(jìn)制小數(shù)部分以及十六進(jìn)制指數(shù)部分組成。十六進(jìn)制小數(shù)部分由小數(shù)點(diǎn)后跟十六進(jìn)制數(shù)字串組成。指數(shù)部分由大寫或小寫字母 p 為前綴后跟十進(jìn)制數(shù)字串組成,這串?dāng)?shù)字表示 p 之前的數(shù)量乘以 2 的幾次方。例如:0xFp2 表示 15 x 22,也就是 60;同樣,0xFp-2 表示 15 x 2ˉ2,也就是 3.75。

負(fù)數(shù)的浮點(diǎn)數(shù)字面量由負(fù)號(hào)(-)和浮點(diǎn)數(shù)字面量組成,例如 -42.5。

浮點(diǎn)數(shù)字面量允許使用下劃線(_)來增強(qiáng)數(shù)字的可讀性,下劃線會(huì)被系統(tǒng)忽略,因此不會(huì)影響字面量的值。同樣地,也可以在數(shù)字前加 0,并不會(huì)影響字面量的值。

除非特別指定,浮點(diǎn)數(shù)字面量的默認(rèn)推導(dǎo)類型為 Swift 標(biāo)準(zhǔn)庫類型中的 Double,表示 64 位浮點(diǎn)數(shù)。Swift 標(biāo)準(zhǔn)庫也定義了 Float 類型,表示 32 位浮點(diǎn)數(shù)。

浮點(diǎn)數(shù)字面量語法

浮點(diǎn)數(shù)字面量十進(jìn)制字面量 十進(jìn)制分?jǐn)?shù)可選 十進(jìn)制指數(shù)可選 浮點(diǎn)數(shù)字面量十六進(jìn)制字面量 十六進(jìn)制分?jǐn)?shù)可選 十六進(jìn)制指數(shù)

十進(jìn)制分?jǐn)?shù). 十進(jìn)制字面量 十進(jìn)制指數(shù)十進(jìn)制指數(shù) e 正負(fù)號(hào)可選 十進(jìn)制字面量

十六進(jìn)制分?jǐn)?shù). 十六進(jìn)制數(shù)字 十六進(jìn)制字面量字符組可選 十六進(jìn)制指數(shù)十六進(jìn)制指數(shù) p 正負(fù)號(hào)可選 十進(jìn)制字面量

十進(jìn)制指數(shù) ee | E 十六進(jìn)制指數(shù) pp | P 正負(fù)號(hào)+ | -

字符串字面量

字符串字面量是被引號(hào)包括的一串字符組成。 單行字符串字面量被包在雙引號(hào)中的一串字符組成,形式如下:

"字符"

字符串字面量中不能包含未轉(zhuǎn)義的雙引號(hào)(")、未轉(zhuǎn)義的反斜線(\)、回車符、換行符。

多行字符串字面量被包在三個(gè)雙引號(hào)中的一串字符組成,形式如下:

""" 字符 """

與單行字符串字面量不同的是,多行字符串字面量可以包含不轉(zhuǎn)義的雙引號(hào)("),回車以及換行。它不能包含三個(gè)非轉(zhuǎn)義的連續(xù)雙引號(hào)。

""" 之后的回車或者換行開始多行字符串字面量,不是字符串的一部分。 """ 之前回車或者換行結(jié)束字面量,也不是字符串的一部分。要讓多行字符串字面量的開始或結(jié)束帶有換行,就在第一行或者最后一行寫一個(gè)空行。

多行字符串字面量可以使用任何空格或制表符組合進(jìn)行縮進(jìn);這些縮進(jìn)不會(huì)包含在字符串中。 """ 的結(jié)束符號(hào)決定了縮進(jìn):字面量中的任何一個(gè)非空行必須起始于多行字符串字面量結(jié)束符號(hào)的前面;空格和制表符不會(huì)被轉(zhuǎn)換。你可以包在縮進(jìn)后含額外的空格和制表符;這些空格和制表符會(huì)在字符串中出現(xiàn)。

多行字符串字面量中的一行結(jié)束使用規(guī)范化的換行符號(hào)。盡管你的源代碼混用了回車和換行符,字符串中所有的行結(jié)束都必須一樣.

在多行字符串字面量里, 在行末用反斜線(\)可以省略字符串行間中斷。 反斜線之間的空白和行間中斷也可以省略。 你可以在你的代碼里用這種語法硬包裹多行字符串字面量,不需要改變產(chǎn)生的字符串的值。

可以在字符串字面量中使用的轉(zhuǎn)義特殊符號(hào)如下:

  • 空字符 \0
  • 反斜線 \\
  • 水平制表符 \t
  • 換行符 \n
  • 回車符 \r
  • 雙引號(hào) \"
  • 單引號(hào) \'
  • Unicode 標(biāo)量 \u{n},n 為一到八位的十六進(jìn)制數(shù)字

字符串字面量允許在反斜杠(\)后的括號(hào) () 中插入表達(dá)式的值。插入表達(dá)式可以包含字符串字面量,但不能包含未轉(zhuǎn)義的反斜線(\)、回車符以及換行符。

例如,以下所有字符串字面量的值都是相同的:

"1 2 3"
"1 2 \("3")"
"1 2 \(3)"
"1 2 \(1 + 2)"
let x = 3; "1 2 \(x)"

字符串字面量的默認(rèn)推導(dǎo)類型為 String。更多有關(guān) String 類型的信息請參考 字符串和字符 以及 字符串結(jié)構(gòu)參考。

操作符連接的字符型字面量是在編譯時(shí)進(jìn)行連接的。比如下面的 textAtextB 是完全一樣的,textA 沒有任何運(yùn)行時(shí)的連接操作。

let textA = "Hello " + "world"
let textB = "Hello world"

字符串字面量語法

字符串字面量靜態(tài)字符串字面量 | 插值字符串字面量

靜態(tài)字符串字面量"引用文本可選" 引用文本引用文本項(xiàng) 引用文本可選 引用文本項(xiàng)轉(zhuǎn)義字符 引用文本項(xiàng) → 除了 "\、U+000A、U+000D 以外的所有 Unicode 字符

插值字符串字面量"插值文本可選" 插值文本插值文本項(xiàng) 插值文本可選 插值文本項(xiàng)\**(表達(dá)式)* | [引用文本項(xiàng)*](#quoted-text-item)

轉(zhuǎn)義字符\**0 | \**\ | \t | \n | \r | \" | \' 轉(zhuǎn)義字符\u { unicode 標(biāo)量數(shù)字 } unicode 標(biāo)量數(shù)字 → 一到八位的十六進(jìn)制數(shù)字

運(yùn)算符

Swift 標(biāo)準(zhǔn)庫定義了許多可供使用的運(yùn)算符,其中大部分在 基礎(chǔ)運(yùn)算符高級(jí)運(yùn)算符 中進(jìn)行了闡述。這一小節(jié)將描述哪些字符能用于自定義運(yùn)算符。

自定義運(yùn)算符可以由以下其中之一的 ASCII 字符 /=、-、+、!*、%、<>、&|、^、? 以及 ~,或者后面語法中規(guī)定的任一個(gè) Unicode 字符(其中包含了數(shù)學(xué)運(yùn)算符、零散符號(hào)(Miscellaneous Symbols) 以及印刷符號(hào)(Dingbats)之類的 Unicode 塊)開始。在第一個(gè)字符之后,允許使用組合型 Unicode 字符。

您也可以以點(diǎn)號(hào)(.)開頭來定義自定義運(yùn)算符。這些運(yùn)算符可以包含額外的點(diǎn),例如 .+.。如果某個(gè)運(yùn)算符不是以點(diǎn)號(hào)開頭的,那么它就無法再包含另外的點(diǎn)號(hào)了。例如,+.+ 就會(huì)被看作為一個(gè) + 運(yùn)算符后面跟著一個(gè) .+ 運(yùn)算符。

雖然您可以用問號(hào) ? 來自定義運(yùn)算符,但是這個(gè)運(yùn)算符不能只包含單獨(dú)的一個(gè)問號(hào)。此外,雖然運(yùn)算符可以包含一個(gè)驚嘆號(hào) !,但是前綴運(yùn)算符不能夠以問號(hào)或者驚嘆號(hào)開頭。

注意

以下這些標(biāo)記 =、->、///*、*/.、<(前綴運(yùn)算符)、&、??(中綴運(yùn)算符)、>(后綴運(yùn)算符)、! 、? 是被系統(tǒng)保留的。這些符號(hào)不能被重載,也不能用于自定義運(yùn)算符。

運(yùn)算符兩側(cè)的空白被用來區(qū)分該運(yùn)算符是否為前綴運(yùn)算符、后綴運(yùn)算符或二元運(yùn)算符。規(guī)則總結(jié)如下:

  • 如果運(yùn)算符兩側(cè)都有空白或兩側(cè)都無空白,將被看作二元運(yùn)算符。例如:a+++ba +++ b 當(dāng)中的 +++ 運(yùn)算符會(huì)被看作二元運(yùn)算符。
  • 如果運(yùn)算符只有左側(cè)空白,將被看作一元前綴運(yùn)算符。例如 a +++b 中的 +++ 運(yùn)算符會(huì)被看做是一元前綴運(yùn)算符。
  • 如果運(yùn)算符只有右側(cè)空白,將被看作一元后綴運(yùn)算符。例如 a+++ b 中的 +++ 運(yùn)算符會(huì)被看作是一元后綴運(yùn)算符。
  • 如果運(yùn)算符左側(cè)沒有空白并緊跟 .,將被看作一元后綴運(yùn)算符。例如 a+++.b 中的 +++ 運(yùn)算符會(huì)被視為一元后綴運(yùn)算符(即上式被視為 a+++ .b 而不是 a +++ .b)。

鑒于這些規(guī)則,運(yùn)算符前的字符 (、[{,運(yùn)算符后的字符 )、]},以及字符 ,、;: 都被視為空白。

以上規(guī)則需注意一點(diǎn),如果預(yù)定義運(yùn)算符 !? 左側(cè)沒有空白,則不管右側(cè)是否有空白都將被看作后綴運(yùn)算符。如果將 ? 用作可選鏈?zhǔn)秸{(diào)用運(yùn)算符,左側(cè)必須無空白。如果用于條件運(yùn)算符 ? :,必須兩側(cè)都有空白。

在某些特定的設(shè)計(jì)中 ,以 <> 開頭的運(yùn)算符會(huì)被分離成兩個(gè)或多個(gè)符號(hào),剩余部分可能會(huì)以同樣的方式被再次分離。因此,在 Dictionary<String, Array<Int>> 中沒有必要添加空白來消除閉合字符 > 的歧義。在這個(gè)例子中, 閉合字符 > 不會(huì)被視為單獨(dú)的符號(hào),因而不會(huì)被錯(cuò)誤解析為 >> 運(yùn)算符。

要學(xué)習(xí)如何自定義運(yùn)算符,請參考 自定義運(yùn)算符運(yùn)算符聲明。要學(xué)習(xí)如何重載運(yùn)算符,請參考 運(yùn)算符函數(shù)

運(yùn)算符語法

運(yùn)算符頭部運(yùn)算符 運(yùn)算符字符組可選 運(yùn)算符頭部點(diǎn)運(yùn)算符 點(diǎn)運(yùn)算符字符組可選

頭部運(yùn)算符/ | = | - | + | ! | * | % | < | > | & | | | ^ | ~ | ? 頭部運(yùn)算符 → U+00A1–U+00A7 頭部運(yùn)算符 → U+00A9 或 U+00AB 頭部運(yùn)算符 → U+00AC 或 U+00AE 頭部運(yùn)算符 → U+00B0–U+00B1,U+00B6,U+00BB,U+00BF,U+00D7,或 U+00F7 頭部運(yùn)算符 → U+2016–U+2017 或 U+2020–U+2027 頭部運(yùn)算符 → U+2030–U+203E 頭部運(yùn)算符 → U+2041–U+2053 頭部運(yùn)算符 → U+2055–U+205E 頭部運(yùn)算符 → U+2190–U+23FF 頭部運(yùn)算符 → U+2500–U+2775 頭部運(yùn)算符 → U+2794–U+2BFF 頭部運(yùn)算符 → U+2E00–U+2E7F 頭部運(yùn)算符 → U+3001–U+3003 頭部運(yùn)算符 → U+3008–U+3030

運(yùn)算符字符頭部運(yùn)算符 運(yùn)算符字符 → U+0300–U+036F 運(yùn)算符字符 → U+1DC0–U+1DFF 運(yùn)算符字符 → U+20D0–U+20FF 運(yùn)算符字符 → U+FE00–U+FE0F 運(yùn)算符字符 → U+FE20–U+FE2F 運(yùn)算符字符 → U+E0100–U+E01EF 運(yùn)算符字符組運(yùn)算符字符 運(yùn)算符字符組可選

頭部點(diǎn)運(yùn)算符.. 點(diǎn)運(yùn)算符字符. | 運(yùn)算符字符 點(diǎn)運(yùn)算符字符組點(diǎn)運(yùn)算符字符 點(diǎn)運(yùn)算符字符組可選

二元運(yùn)算符運(yùn)算符 前綴運(yùn)算符運(yùn)算符 后綴運(yùn)算符運(yùn)算符

上一篇:版本兼容性下一篇:構(gòu)造過程