標籤:
操作員正在檢查,更改。歸併值特殊符號或短語。例如,加+這兩個數字相加(例如let i = 1 + 2)。
算如更複雜的邏輯和操作的實施&&(例如if enteredDoorCode && passedRetinaScan),又或讓 i 值加1的便捷運算子自增運算子++i等。
Swift 支援大部分標準 C 語言的運算子,且改進很多特性來降低常規編碼錯誤。如,賦值符(=)不返回值。以防止把想要推斷相等運算子(==)的地方寫成賦值符導致的錯誤。
數值運算子(+,-,*。/,%等)會檢測並不同意值溢出,以此來避免儲存變數時因為變數大於或小於其類型所能承載的範圍時導致的異常結果。
當然同意你使用 Swift 的溢出運算子來實現溢出。詳情參見溢出運算子。
差別於 C 語言。在 Swift 中你能夠對浮點數進行取餘運算(%),Swift 還提供了 C 語言沒有的表達兩數之間的值的區間運算子,(a..b和a...b),這方便我們表達一個區間內的數值。
本章節僅僅描寫敘述了 Swift 中的基本運算子,進階運算子包括了進階運算子,及怎樣自己定義運算子,及怎樣進行自己定義類型的運算子多載。
術語
運算子有一元,二元和三元運算子。
一元運算子對單一操作對象操作(如-a)。
一元運算子分前置符和後置運算子,前置運算子需緊排操作對象之前(如!b),後置運算子需緊跟操作對象之後(如i++)。
二元運算子操作兩個操作對象(如2 + 3),是中置的,由於它們出如今兩個操作對象之間。
三元運算子操作三個操作對象,和 C 語言一樣,Swift 僅僅有一個三元運算子,就是三元條件運算子(a ?
b : c)。
受運算子影響的值叫運算元。在運算式1 + 2中,加號+是二元運算子。它的兩個運算元是值1和2。
賦值運算子
賦值運算(a = b)。表示用b的值來初始化或更新a的值:
let b = 10var a = 5a = b// a 如今等於 10
假設賦值的右邊是一個多元組,它的元素能夠立即被分解多個變數或變數:
let (x, y) = (1, 2)// 如今 x 等於 1, y 等於 2
與 C 語言和 Objective-C 不同,Swift 的賦值操作並不返回不論什麼值。
所以下面代碼是錯誤的:
let (x, y) = (1, 2)// 如今 x 等於 1, y 等於 2
這個特性使得你無法把(==)錯寫成(=)了,因為if x = y是錯誤碼。Swift 從底層幫你避免了這些代碼錯誤。
數值運算
Swift 讓全部數值類型都支援了主要的四則運算:
加法(+)
減法(-)
乘法(*)
除法(/)
1 + 2 // 等於 35 - 3 // 等於 22 * 3 // 等於 610.0 / 2.5 // 等於 4.0
與 C 語言和 Objective-C 不同的是,Swift 預設不同意在數值運算中出現溢出情況。但你能夠使用Swift 的溢出運算子來達到你有目的的溢出(如a &+ b)。
詳情參見溢出運算子。
加法運算子也用於String的拼接:
"hello, " +"world" // 等於"hello, world"
兩個Character值或一個String和一個Character值。相加會產生一個新的String值:
l
et dog: Character = "d"let cow: Character = "c"let dogCow = dog + cow// dogCow 如今是 "dc"
詳情參見字元。字串的拼接。
求餘運算
求餘運算(a % b)是計算b的多少倍剛剛好能夠容入a,返回多出來的那部分(餘數)。
注意:
求餘運算(%)在其它語言也叫模數運算。然而嚴格說來。我們看該運算子對負數的操作結果,"求餘"比"模數"更合適些。
我們來談談取餘是怎麼回事,計算9 % 4,你先計算出4的多少倍會剛好能夠容入9中:
2倍,很好,那餘數是1
在 Swift 中這麼來表達:
9 % 4 // 等於 1
為了得到a % b的結果,%計算了下面等式,並輸出餘數作為結果:
a = (b × 倍數) + 餘數
當倍數取最大值的時候。就會剛好能夠容入a中。
把9和4代入等式中。我們得1:
9 = (4 × 2) + 1
相同的方法。我來們計算 -9 % 4:
-9 % 4 // 等於 -1
把-9和4代入等式,-2是取到的最大整數:
-9 = (4 × -2) + -1
餘數是-1。
在對負數b求餘時。b的符號會被忽略。這意味著 a % b 和 a % -b的結果是同樣的。
浮點數求餘計算
不同於 C 語言和 Objective-C,Swift 中是能夠對浮點數進行求餘的。
8 % 2.5 // 等於 0.5
這個範例中。8除於2.5等於3餘0.5,所以結果是一個Double值0.5。
自增和自增運算
和 C 語言一樣,Swift 也提供了方便對變數本身加1或減1的自增(++)和自減(--)的運算子。
其操作對象能夠是整形和浮點型。 ?
var i = 0++i // 如今 i = 1
每調用一次++i,i的值就會加1。實際上,++i是i = i + 1的簡寫,而--i是i = i - 1的簡寫。
++和--既是前置又是後置運算。++i,i++,--i和i--都是有效寫法。
我們須要注意的是這些運算子改動了i後有一個返回值。
假設你僅僅想改動i的值。那你就能夠忽略這個返回值。但假設你想使用返回值,你就須要留意前置和後置操作的返回值是不同的。
當++前置的時候,先自増再返回。
當++後置的時候。先返回再自增。
比如:
var a = 0let b = ++a // a 和 b 如今都是 1let c = a++ // a 如今 2, 但 c 是 a 自增前的值 1
上述範例。let b = ++a先把a加1了再返回a的值。所以a和b都是新值1。
而let c = a++。是先返回了a的值。然後a才加1。所以c得到了a的舊值1,而a加1後變成2。
除非你須要使用i++的特性。不然推薦你使用++i和--i,由於先改動後返回這種行為更符合我們的邏輯。
一元負號
數值的加號或減號能夠使用首碼-(即一元負號)來切換:
let three = 3let minusThree = -three // minusThree 等於 -3let plusThree = -minusThree // plusThree 等於 3, 或 "負負3"
一元負號(-)寫在運算元之前,中間沒有空格。
一元正號
一元正號(+)不做不論什麼改變地返回運算元的值。
let minusSix = -6let alsoMinusSix = +minusSix // alsoMinusSix 等於 -6
儘管一元+做無用功。但當你在使用一元負號來表達負數時,你能夠使用一元正號來表達正數,如此你的代碼會具有對稱美。
複合賦值(Compound Assignment Operators)
如同強大的 C 語言,Swift 也提供把其它運算子和賦值運算(=)組合的複合賦值運算子,加賦運算(+=)是當中一個範例:
var a = 1a += 2 // a 如今是 3
運算式a += 2是a = a + 2的簡寫。一個加賦運算就把加法和賦值兩件事完畢了。
注意:
複合賦值運算沒有返回值,let b = a += 2這類代碼是錯誤。
這不同於上面提到的自增和自減運算子。
在運算式章節裡有複合運算子的完整列表。 ?
比較運算
全部標準 C 語言中的比較運算都能夠在 Swift 中使用。
等於(a == b)
不等於(a!= b)
大於(a > b)
小於(a < b)
大於等於(a >= b)
小於等於(a <= b)
注意:
Swift 也提供恒等===和不恒等!==這兩個比較符來推斷兩個對象是否引用同一個對象執行個體。
很多其它細節在類與結構。
每一個比較運算都返回了一個標識運算式是否成立的布爾值:
1 == 1 // true, 由於 1 等於 12 != 1 // true, 由於 2 不等於 12 > 1 // true, 由於 2 大於 11 < 2 // true, 由於 1 小於21 >= 1 // true, 由於 1 大於等於 12 <= 1 // false, 由於 2 並不小於等於 1
比較運算多用於條件陳述式。如if條件:
let name = "world"if name == "world" { println("hello, world")} else { println("I'm sorry \(name), but I don't recognize you")}// 出口 "hello,world", 由於 `name` 它等於 "world"
左右if聲明。請參閱控制流程。
Swift程式設計語言學習2.1——基礎電訊廠商(在)