- Swift 5從零到精通iOS開發(fā)訓(xùn)練營
- 張益琿編著
- 803字
- 2022-07-27 18:32:16
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é)合性。
- Flask Web全棧開發(fā)實(shí)戰(zhàn)
- C語言程序設(shè)計(jì)案例教程(第2版)
- Learning Network Forensics
- C語言程序設(shè)計(jì)
- Statistical Application Development with R and Python(Second Edition)
- Unity&VR游戲美術(shù)設(shè)計(jì)實(shí)戰(zhàn)
- Scratch趣味編程:陪孩子像搭積木一樣學(xué)編程
- 寫給程序員的Python教程
- Everyday Data Structures
- Unity 2017 Game AI Programming(Third Edition)
- Mastering Bootstrap 4
- 現(xiàn)代C++語言核心特性解析
- Developer,Advocate!
- Modern R Programming Cookbook
- Mastering Rust