運(yùn)算符是一種用來(lái)檢查(check)、改變(change)、組合(combine)值得特殊的符號(hào)或短語(yǔ)。
Swift支持大多數(shù)的標(biāo)準(zhǔn)C語(yǔ)言。在Swift中會(huì)對(duì)變量進(jìn)行判斷,其值是否會(huì)溢出,如果為是就會(huì)拋出異常。如果你想值溢出,則可以使用溢出運(yùn)算符。
Swift提供了在C語(yǔ)言中沒(méi)有的兩個(gè)范圍運(yùn)算符(a..<b和a...b),是用來(lái)表達(dá)一個(gè)區(qū)間內(nèi)的數(shù)值。
術(shù)語(yǔ)(Terminology)#
運(yùn)算符是一元、二元或者三元的:
- 一元運(yùn)算符是對(duì)單一對(duì)象進(jìn)行操作(??-a)。前置(??!b)或者后置運(yùn)算符(??c!)都需要緊貼著多做對(duì)象。
在swift3.0中已經(jīng)移除自增或自減(++i, i--)
- 二元運(yùn)算符是對(duì)兩個(gè)對(duì)象進(jìn)行操作,并且只能在兩個(gè)對(duì)象之間出現(xiàn)(??2+3)。
- 三元運(yùn)算符就是對(duì)三個(gè)對(duì)象進(jìn)行操作,和C語(yǔ)言一樣,Swift中只有一個(gè)三元的運(yùn)算符,“問(wèn)號(hào)表達(dá)式”(??a ? b : c)。
賦值運(yùn)算符(Assignment Operator)
與C語(yǔ)言和OC不同,賦值是不會(huì)有返回值的,所以下面這段代碼是錯(cuò)誤的:
if x = y {
//This is not valid, because x = y does not return a value.
}
這個(gè)特性可以徹底杜絕將"=="錯(cuò)寫成成"=",因?yàn)镾wift從底層就避免了這個(gè)錯(cuò)誤。
數(shù)值運(yùn)算符(Arithmetic Operators)
Swift中只有四中標(biāo)準(zhǔn)的數(shù)值運(yùn)算符(+, -, *, /)。并且在默認(rèn)情況下是不允許出現(xiàn)值溢出的情況。
加號(hào)運(yùn)算(+)也支持String的連接:
"hello, " + "world" //equals "hello, world"
Swift3.0中,不再支持兩個(gè)字符用"+"進(jìn)行連接
余數(shù)運(yùn)算符(Remainder Operator)
在 a % b中,b的符號(hào)是被忽略的,也就是說(shuō)a % b和a % -b的值是一樣的。
在Swift中是可以對(duì)浮點(diǎn)型進(jìn)行取余的。(不知道為什么在Swift3.0的文檔中并沒(méi)有寫出來(lái))
// 3.0中對(duì)浮點(diǎn)型進(jìn)行取余的方式變了
8.0.truncatingRemainder(dividingBy: 2.5) // equal to 0.5
復(fù)合運(yùn)算符(Compound Assignment Operators)
因?yàn)閺?fù)合運(yùn)算符是沒(méi)有返回值的,所以不能這樣寫:
let b = a += 2
比較運(yùn)算符(Comparison Operators)
Swift完全支持C語(yǔ)言中的比較運(yùn)算符,但是還另外提供了兩個(gè)比較運(yùn)算符:恒等(===)和不恒等(!==)來(lái)比較是否是指向同一對(duì)象。
也可以對(duì)元組進(jìn)行比較,但是前提是:1??元組的值的個(gè)數(shù)必須相同,2??每個(gè)對(duì)應(yīng)的值的類型相同,3??不能有Bool類型
元組比較的原則就是從左至右依次進(jìn)行比較,當(dāng)出現(xiàn)不等的時(shí)候直接返回結(jié)果,當(dāng)所有值均相等時(shí)才會(huì)認(rèn)為兩個(gè)元組是相等的。??
空合并運(yùn)算符(Nil-Coalescing Operator)(也不知道這么翻譯對(duì)不對(duì)??)
nil-coalescing operator返回的值是這樣得到的:首先a是一個(gè)可選值,如果a不為空返回a,a為空則返回b
可以用“問(wèn)號(hào)表達(dá)式”表示相同的意義:
a != nil ? a! : b
注意:如果a的值不為空,并且b的值沒(méi)有進(jìn)行過(guò)評(píng)估,那么這個(gè)就叫做“短路評(píng)估”
If the value of a is non-nil, the value of b is not evaluated. This is known as short-circuit valuation.
范圍運(yùn)算符(Range Operators)
閉區(qū)間運(yùn)算符(Closed Range Operator)
閉區(qū)間運(yùn)算符(a...b)表示從a到b,其中包括a和b,并且a的值必須小于等于b。
半開(kāi)半閉區(qū)間(Half-Open Range Operator)
半開(kāi)半閉區(qū)間運(yùn)算符(a..<b)表示從a到b,其中包括a,但是不包括b。a的值必須小于等于b,如果a和b相等,那么就會(huì)返回一個(gè)空的范圍。
半開(kāi)半閉區(qū)間在遍歷數(shù)組的時(shí)候是十分有效的。
邏輯運(yùn)算符(Logical Operators)
邏輯運(yùn)算符操作的對(duì)象是布爾邏輯值(true和false)。
支持三個(gè)C語(yǔ)言的邏輯運(yùn)算符:
- 邏輯非(!a)
- 邏輯與(a && b)
- 邏輯或(a || b)