運算符聲明會向程序中引入中綴、前綴或后綴運算符,它使用上下文關(guān)鍵字operator聲明。 可以聲明三種不同的綴性:中綴、前綴和后綴。操作符的綴性描述了操作符與它的操作數(shù)的相對位置。 運算符聲明有三種基本形式,每種綴性各一種。運算符的綴性通過在operator和運算符之間添加上下文關(guān)鍵字infix,prefix或postfix來指定。每種形式中,運算符的名字只能包含Operators中定義的運算符字符。
下面的這種形式聲明了一個新的中綴運算符:
operator infixoperator name{
previewprecedenceprecedence level
associativityassociativity
}
中綴運算符是二元運算符,它可以被置于兩個操作數(shù)之間,比如表達式1 + 2 中的加法運算符(+)。
中綴運算符可以可選地指定優(yōu)先級,結(jié)合性,或兩者同時指定。
運算符的優(yōu)先級可以指定在沒有括號包圍的情況下,運算符與它的操作數(shù)如何緊密綁定的??梢允褂蒙舷挛年P(guān)鍵字precedence并優(yōu)先級(precedence level)一起來指定一個運算符的優(yōu)先級。優(yōu)先級可以是0到255之間的任何一個數(shù)字(十進制整數(shù));與十進制整數(shù)字面量不同的是,它不可以包含任何下劃線字符。盡管優(yōu)先級是一個特定的數(shù)字,但它僅用作與另一個運算符比較(大小)。也就是說,一個操作數(shù)可以同時被兩個運算符使用時,例如2 + 3 * 5,優(yōu)先級更高的運算符將優(yōu)先與操作數(shù)綁定。
運算符的結(jié)合性可以指定在沒有括號包圍的情況下,優(yōu)先級相同的運算符以何種順序被分組的??梢允褂蒙舷挛年P(guān)鍵字associativity并結(jié)合性(associativity)一起來指定一個運算符的結(jié)合性,其中結(jié)合性可以說是上下文關(guān)鍵字left,right或none中的任何一個。左結(jié)合運算符以從左到右的形式分組。例如,減法運算符(-)具有左結(jié)合性,因此4 - 5 - 6被以(4 - 5) - 6的形式分組,其結(jié)果為-7。 右結(jié)合運算符以從右到左的形式分組,對于設置為none的非結(jié)合運算符,它們不以任何形式分組。具有相同優(yōu)先級的非結(jié)合運算符,不可以互相鄰接。例如,表達式1 < 2 < 3非法的。
聲明時不指定任何優(yōu)先級或結(jié)合性的中綴運算符,它們的優(yōu)先級會被初始化為100,結(jié)合性被初始化為none。
下面的這種形式聲明了一個新的前綴運算符:
operator prefix
operator name{}
緊跟在操作數(shù)前邊的前綴運算符(prefix operator)是一元運算符,例如表達式++i中的前綴遞增運算符(++)。
前綴運算符的聲明中不指定優(yōu)先級。前綴運算符是非結(jié)合的。
下面的這種形式聲明了一個新的后綴運算符:
operator postfix
operator name{}
緊跟在操作數(shù)后邊的后綴運算符(postfix operator)是一元運算符,例如表達式i++中的前綴遞增運算符(++)。
和前綴運算符一樣,后綴運算符的聲明中不指定優(yōu)先級。后綴運算符是非結(jié)合的。
聲明了一個新的運算符以后,需要聲明一個跟這個運算符同名的函數(shù)來實現(xiàn)這個運算符。如何實現(xiàn)一個新的運算符,請參考Custom Operators。
運算符聲明語法
運算符聲明 → 前置運算符聲明 | 后置運算符聲明 | 中置運算符聲明
前置運算符聲明 → 運算符 prefix 運算符 { }
后置運算符聲明 → 運算符 postfix 運算符 { }
中置運算符聲明 → 運算符 infix 運算符 { 中置運算符屬性 可選 }
中置運算符屬性 → 優(yōu)先級子句 可選 結(jié)和性子句 可選
優(yōu)先級子句 → precedence 上一篇:Swift擴展下一篇:Swift數(shù)值型類型轉(zhuǎn)換