Swift3.0-基本運算子
一、簡介
運算子是檢查、改變、合併值的特殊符號或者短語。在本篇文章中只介紹基本運算子,Swift中包含的高階運算子(比如溢位運算子)不在其中。Swift中的運算子和OC中的運演算法還是有比較大的區別的,Swift語言這樣做的目的是減少常規編碼錯誤。
二、術語
運算子分為一元、二元和三元運算子。
一元運算子分為前置運算子和後置運算子。
受運算子影響的值叫運算元,在表示式1 + 2中,加號(+)是二元運算子,它的兩個運算元是值1和值2。
三、Swift和OC的對比
Swift | OC | 附加說明 |
= | = | Swift與OC不同,Swift的賦值操作不返回任何值 |
+、-、*、/、-=、+= | +、-、*、/、-=、+= | Swift中的+可以拼接String |
==、!=、>、<、>=、<= | ==、!=、>、<、>=、<= | 比較運算子可以作用於Swift中的元組 |
問題 ? 答案1 : 答案2 | 問題 ? 答案1 : 答案2 | 特殊情況下的三目運算子可以用空合運算子簡化 |
?? | 無 | Swift中的空合運算子是為optional型別所產生的 |
a...b、a..<b | 無 | OC中並沒有對應的區間運算子 |
!、&&、|| | !、&&、|| | 與OC使用一致 |
四、Swift基本運算子的介紹
1、賦值運算子(=)
·這裡只需要注意的是Swift與C語言和OC不同,Swift的賦值運算子操作並不返回任何值。
說明:這個特性使得你無法把(==)錯寫成(=),由於if x = y是錯誤程式碼,Swift能幫你避免此類錯誤的發生。
2、算術運算子(+)
·Swift中所有的數值型別都支援基本的四則算術運算子:加法(+)、減法(-)、乘法(*)、除法(/)
·Swift中的加法運算子還可以用於String的拼接,OC中沒有這個特性
·Swift預設情況下不允許在數值運算中出現溢位情況(當然在高階運算子中有溢位運算子來實現溢位運算)。但是OC中是沒有這個檢查的
3、求餘運算子(%)
·求餘運算和取模運算是不一樣的結果。嚴格的定義請根據數學上的定義區分
例如計算:-7 Mod 4
那麼:a = -7;b = 4;
第一步:求整數商c,如果進行求模運算c = -2(向負無窮方向舍入),求餘c = -1(向0方向舍入)
第二步:因為c的值不同,求模時r = 1,求餘時r = -3
·為了比較好記憶求餘運算的方式,使用a = (b * 倍數) + 餘數,當b的最大多少倍剛好能夠容入a時,此時的餘數就是求餘運算的結果
9 % 4
//9 = (4 * 倍數)+ 餘數,當倍數等於2時,8剛好容入9,此時餘數為1
-9 % 4
//-9 = (4 * 倍數) +餘數,當倍數等於-2時,-8剛好容入-9,此時餘數為-1
9 % -4
//9 = (-4 *倍數)+餘數,當倍數等於-2時,8剛好容入9,此時餘數為1
4、一元負號運算子(-)
·一元運算子與運算元之間不要有空格
5、一元正號運算子(+)
·一元運算子與運算元之間不要有空格
6、組合賦值運算子(+=、-=)
·先後完成兩個運算任務
7、比較運算子(==、!=、>、<、>=、<=)
·因為Swift中增加了元組資料型別,元組也可以使用比較運算子,採用的是從左到右依次比較,當左邊的比較相等才進行右邊的比較,以此類推。但是Swift標準庫只能比較7個以內元素的元組比較函式。如果元組元素超過7個時,需要自己實現比較運算子。
·Int和String等型別可以比較,Bool型別不能比較。
8、三目運算子(問題 ? 答案1 : 答案2)
·跟OC中的使用一致
9、空合運算子(??)
·空合運算子是根據Swift中出現的可選型別而出現的在特殊情況下對三目運算子的一種簡寫。
·空合運算子(a ?? b)將對可選型別進行空判斷,如果a包含一個值就進行解封,否則就返回一個預設值b。表示式a必須是Optional型別。預設值b的型別必須要和a儲存值的型別儲存一致。
let defaultColorName = "red"
var userDefinedColorName: String?
var colorNameToUse = a != nil ? userDefinedColorName : defaultColorName
等價於
var colorNameToUse = userDefinedColorName ?? defaultColorName
10、區間運算子(a...b、a..<b)
·閉區間運算子(a...b)定義一個包含從a到b(包括a和b)的所有值的區間。
·半開區間運算子(a..<b)定義一個從a到b但不包括b的區間。
·使用場景經常在for in迴圈中出現
let names = ["Anna", "Alex", "Brain", "Jack"]
let count = names.count
for i in 0..<count {
//
}
11、邏輯運算子(!、&&、||)
·邏輯非 、邏輯與、邏輯或,三個邏輯運算子跟OC中的使用保持一致
·不管是Swift還是OC,邏輯操作符&&和||都是在左結合的,這意味著擁有多元邏輯操作符的符合表示式優先計算最左邊的子表示式。當然,對於複雜表示式,使用括號來明確優先順序更加容易讀懂。