位置:首頁 > 高級語言 > Swift教學 > Swift運算符聲明

Swift運算符聲明

運算符聲明

運算符聲明會向程序中引入中綴、前綴或後綴運算符,它使用上下文關鍵字operator聲明。 可以聲明三種不同的綴性:中綴、前綴和後綴。操作符的綴性描述了操作符與它的操作數的相對位置。 運算符聲明有三種基本形式,每種綴性各一種。運算符的綴性通過在operator和運算符之間添加上下文關鍵字infixprefixpostfix來指定。每種形式中,運算符的名字隻能包含Operators中定義的運算符字符。

下麵的這種形式聲明了一個新的中綴運算符:


operator infix operator name{
previewprecedence precedence level
associativity associativity
}
 

中綴運算符是二元運算符,它可以被置於兩個操作數之間,比如表達式1 + 2 中的加法運算符(+)。

中綴運算符可以可選地指定優先級,結合性,或兩者同時指定。

運算符的優先級可以指定在冇有括號包圍的情況下,運算符與它的操作數如何緊密綁定的。可以使用上下文關鍵字precedence優先級(precedence level)一起來指定一個運算符的優先級。優先級可以是0到255之間的任何一個數字(十進製整數);與十進製整數字麵量不同的是,它不可以包含任何下劃線字符。儘管優先級是一個特定的數字,但它僅用作與另一個運算符比較(大小)。也就是說,一個操作數可以同時被兩個運算符使用時,例如2 + 3 * 5,優先級更高的運算符將優先與操作數綁定。

運算符的結合性可以指定在冇有括號包圍的情況下,優先級相同的運算符以何種順序被分組的。可以使用上下文關鍵字associativity結合性(associativity)一起來指定一個運算符的結合性,其中結合性可以說是上下文關鍵字leftrightnone中的任何一個。左結合運算符以從左到右的形式分組。例如,減法運算符(-)具有左結合性,因此4 - 5 - 6被以(4 - 5) - 6的形式分組,其結果為-7。 右結合運算符以從右到左的形式分組,對於設置為none的非結合運算符,它們不以任何形式分組。具有相同優先級的非結合運算符,不可以互相鄰接。例如,表達式1 < 2 < 3非法的。

聲明時不指定任何優先級或結合性的中綴運算符,它們的優先級會被初始化為100,結合性被初始化為none

下麵的這種形式聲明了一個新的前綴運算符:

operator prefix operator name{}

緊跟在操作數前邊的前綴運算符(prefix operator)是一元運算符,例如表達式++i中的前綴遞增運算符(++)。

前綴運算符的聲明中不指定優先級。前綴運算符是非結合的。

下麵的這種形式聲明了一個新的後綴運算符:

operator postfix operator name{}

緊跟在操作數後邊的後綴運算符(postfix operator)是一元運算符,例如表達式i++中的前綴遞增運算符(++)。

和前綴運算符一樣,後綴運算符的聲明中不指定優先級。後綴運算符是非結合的。

聲明了一個新的運算符以後,需要聲明一個跟這個運算符同名的函數來實現這個運算符。如何實現一個新的運算符,請參考Custom Operators


運算符聲明語法
運算符聲明 → 前置運算符聲明 | 後置運算符聲明 | 中置運算符聲明
前置運算符聲明 → 運算符 prefix 運算符 { }
後置運算符聲明 → 運算符 postfix 運算符 { }
中置運算符聲明 → 運算符 infix 運算符 { 中置運算符屬性 可選 }
中置運算符屬性 → 優先級子句 可選 結和性子句 可選
優先級子句 → precedence 優先級水平
優先級水平 → 數值 0 到 255
結和性子句 → associativity 結和性
結和性 → left | right | none