官术网_书友最值得收藏!

6.3 運(yùn)算符的優(yōu)先級與結(jié)合性

在小時(shí)候?qū)W習(xí)數(shù)學(xué)時(shí),老師總會強(qiáng)調(diào)四則運(yùn)算中的先乘除后加減、從左向右計(jì)算等規(guī)則。其實(shí)在Swift語言編程中,也有這樣的規(guī)則存在。例如,進(jìn)行如下混合運(yùn)算:

從上面的演示代碼中可以看出,Swift語言中的四則運(yùn)算也是先進(jìn)行乘除運(yùn)算,后進(jìn)行加減運(yùn)算,運(yùn)算順序?yàn)閺淖笙蛴摇F鋵?shí)在Swift語言的運(yùn)算符體系中,有著優(yōu)先級與結(jié)合性的概念,運(yùn)算符的優(yōu)先級決定同一行代碼中出現(xiàn)多種運(yùn)算符時(shí)的計(jì)算順序,運(yùn)算符的結(jié)合性決定運(yùn)算符是從左向右運(yùn)算還是從右向左運(yùn)算。任何運(yùn)算符都有默認(rèn)的優(yōu)先級,開發(fā)者自定義的運(yùn)算符也是如此,優(yōu)先級越高的運(yùn)算符越優(yōu)先執(zhí)行。對于結(jié)合性而言,由于前綴運(yùn)算符與后綴運(yùn)算符都只有一個(gè)操作數(shù),因此它只對中綴運(yùn)算符有意義。

表6-1和表6-2列出了Swift中所有運(yùn)算符的相關(guān)信息。

表6-1 Swift語言中的系統(tǒng)前綴運(yùn)算符

表6-2 Swift語言中的系統(tǒng)中綴運(yùn)算符

表6-1和表6-2列舉了Swift語言系統(tǒng)定義的所有運(yùn)算符相關(guān)信息,無須專門記憶,在實(shí)際開發(fā)中需要使用時(shí)再來查表即可。其實(shí)更多情況下,開發(fā)者會直接使用小括號來決定表達(dá)式的執(zhí)行順序,這樣代碼會更加直觀。

在重載運(yùn)算符操作中,并不會改變原運(yùn)算符的結(jié)合性和優(yōu)先級,但對于自定義運(yùn)算符,開發(fā)者可以設(shè)置其結(jié)合性與優(yōu)先級,示例如下:

如以上代碼所示,其中precedencegroup關(guān)鍵字用來定義運(yùn)算符的優(yōu)先級組。在自定義優(yōu)先級時(shí),我們可以為其設(shè)置一個(gè)優(yōu)先級組,系統(tǒng)默認(rèn)內(nèi)置了非常多的優(yōu)先級組,如加法運(yùn)算符優(yōu)先級組、乘法運(yùn)算符優(yōu)先級組、位運(yùn)算符優(yōu)先級組等,我們可以直接使用,例如:

     // 定義中綴運(yùn)算符,其優(yōu)先級屬性要與系統(tǒng)的加法相關(guān)運(yùn)算符一致
     infix operator ++++:AdditionPrecedence

當(dāng)系統(tǒng)內(nèi)置的優(yōu)先級組不能滿足我們的要求時(shí),即可使用precedencegroup關(guān)鍵字來自定義優(yōu)先級組,其中higerThan用來定義當(dāng)前優(yōu)先級組的優(yōu)先級比哪個(gè)優(yōu)先級組高,lowerThan用來定義當(dāng)前優(yōu)先級組的優(yōu)先級比哪個(gè)優(yōu)先級組低,assignment用來設(shè)置是否會影響可選鏈賦值運(yùn)算中的優(yōu)先級判定規(guī)則,associativity用來設(shè)置可以選擇left或者right來定義成左結(jié)合性或者右結(jié)合性,設(shè)置為none則為默認(rèn)結(jié)合性。

主站蜘蛛池模板: 深圳市| 犍为县| 湖口县| 双峰县| 涞源县| 高安市| 夏邑县| 龙门县| 辛集市| 烟台市| 江油市| 岑巩县| 广平县| 逊克县| 鸡西市| 邵东县| 凉山| 资兴市| 六盘水市| 巴楚县| 仲巴县| 郧西县| 嫩江县| 互助| 敦煌市| 弥渡县| 隆昌县| 来安县| 台安县| 无锡市| 阿拉善盟| 和静县| 张家川| 深圳市| 铁岭市| 远安县| 望都县| 赤壁市| 乌恰县| 灵石县| 正阳县|