運(yùn)算符的優(yōu)先級(jí)使得一些運(yùn)算符優(yōu)先于其他運(yùn)算符,高優(yōu)先級(jí)的運(yùn)算符會(huì)先被計(jì)算。
結(jié)合性定義相同優(yōu)先級(jí)的運(yùn)算符在一起時(shí)是怎么組合或關(guān)聯(lián)的,是和左邊的一組呢,還是和右邊的一組。意思就是,到底是和左邊的表達(dá)式結(jié)合呢,還是和右邊的表達(dá)式結(jié)合?
在混合表達(dá)式中,運(yùn)算符的優(yōu)先級(jí)和結(jié)合性是非常重要的。舉個(gè)例子,為什么下列表達(dá)式的結(jié)果為4?
2 + 3 * 4 % 5
// 結(jié)果是 4
如果嚴(yán)格地從左計(jì)算到右,計(jì)算過程會(huì)是這樣:
但是正確答案是4而不是0。優(yōu)先級(jí)高的運(yùn)算符要先計(jì)算,在Swift和C語言中,都是先乘除后加減的。所以,執(zhí)行完乘法和求余運(yùn)算才能執(zhí)行加減運(yùn)算。
乘法和求余擁有相同的優(yōu)先級(jí),在運(yùn)算過程中,我們還需要結(jié)合性,乘法和求余運(yùn)算都是左結(jié)合的。這相當(dāng)于在表達(dá)式中有隱藏的括號(hào)讓運(yùn)算從左開始。
2 + ((3 * 4) % 5)
3 * 4 = 12,所以這相當(dāng)于:
2 + (12 % 5)
12 % 5 = 2,所這又相當(dāng)于
2 + 2
計(jì)算結(jié)果為 4。
查閱Swift運(yùn)算符的優(yōu)先級(jí)和結(jié)合性的完整列表,請(qǐng)看表達(dá)式。
注意:
Swift的運(yùn)算符較C語言和Objective-C來得更簡(jiǎn)單和保守,這意味著跟基于C的語言可能不一樣。所以,在移植已有代碼到Swift時(shí),注意去確保代碼按你想的那樣去執(zhí)行。