運算子
運算子分類
從運算元角度看:運算子包括一元、二元、三元。這裡的一二三指運算元的數量,運算元指的是被操作的數值。
從運算子位置看:運算子分為字首、中綴、字尾。例如:!b, b + c, c!
賦值運算子
賦值運算子( a = b )可以初始化或者更新 a 為 b 的值:
如果賦值符號右側是擁有多個值的元組,它的元素將會一次性地拆分成常量或者變數:
let (x, y) = (1, 2) // x 等於 1, 同時 y 等於 2
與 Objective-C 和 C 不同,Swift 的賦值符號自身不會返回值。下面的語句是不合法的:
if x = y { // 這是不合法的, 因為 x = y 並不會返回任何值。 }
這個特性避免了賦值符號 (=
) 被意外地用於等於符號 (==
) 的實際意圖上。Swift 通過讓 if x = y 非法來幫助你避免這類的錯誤在你的程式碼中出現。
算數運算子
- 加 ( + ),:作為中綴,表示兩個數值相加,如果是字串,表示字串拼接;作為字首,表示正數,數值不變
- 減 ( - ): 作為中綴,表示兩個數值相減;作為字首,表示負數
- 乘 ( * )
- 除 ( / )
- 取餘(%):餘數運算子( a % b )可以求出多少個 b 的倍數能夠剛好放進 a 中並且返回剩下的值(就是我們所謂的餘數)。9 % 4 = 1, 因為 4 * 2 + 1 = 9
組合運算子
+= 、 -= 、/= 、*=
var a = 1 a += 2
表示式 a += 2 其實就是 a = a + 2 的簡寫。效率上來講,加號和賦值符號組合成的一個運算子能夠同時進行這兩個操作。
比較運算子
下面是常規的比較運算子:
- 相等 ( a == b )
- 不相等 ( a != b )
- 大於 ( a > b )
- 小於 ( a < b )
- 大於等於 ( a >= b )
- 小於等於 ( a <= b )
也可以用在相同數量的元組中, 元組以從左到右的順序比較大小,一次一個值,直到找到兩個不相等的值為止。如果所有的值都是相等的,那麼就認為元組本身是相等的。
Swift 標準庫包含的元組比較運算子僅支援小於七個元素的元組。要比較擁有七個或者更多元素的元組,你必須自己實現比較運算子。
(1, "zebra") < (2, "apple") // true because 1 is less than 2 (3, "apple") < (3, "bird") // true because 3 is equal to 3, and "apple" is less than "bird" (4, "dog") == (4, "dog") // true because 4 is equal to 4, and "dog" is equal to "dog"
三目運算子
三元條件運算子是一種有三部分的特殊運算,它看起來是這樣的: question ? answer1 : answer2 。這是一種基於 question 是真還是假來選擇兩個表示式之一的便捷寫法。
三元條件運算子提供了一個非常有效的簡寫來決策要兩個表示式之間選哪個。總之,使用三元條件運算子要小心。它的簡潔性會導致你程式碼重用的時候失去易讀的特性。避免把多個三元條件運算子組合到一句程式碼當中。
合併空值運算子
合併空值運算子 ( a ?? b )如果可選項 a 有值則展開,如果沒有值,是 nil ,則返回預設值 b 。表示式 a 必須是一個可選型別。表示式 b 必須與 a 的儲存型別相同。
合併空值運算子是下邊程式碼的縮寫:
a != nil ? a! : b
區間運算子
閉區間運算子( a...b )定義了從 a 到 b 的一組範圍,並且包含 a 和 b 。 a 的值不能大於 b 。
for index in 1...5 { print("\(index) times 5 is \(index * 5)") }
半開區間運算子( a..<b )定義了從 a 到 b 但不包括 b 的區間,即 半開 ,因為它只包含起始值但並不包含結束值
單側區間:有另外一種形式來讓區間朝一個方向儘可能的遠。比如說,一個包含陣列所有元素的區間,從索引 2 到陣列的結束。在這種情況下,你可以省略區間運算子一側的值。因為運算子只有一側有值,所以這種區間叫做單側區間。閉區間和半開區間都有單側區間的形式。比如說:
let names = ["Anna", "Alex", "Brian", "Jack"] for name in names[2...] { print(name) } // Brian // Jack for name in names[...2] { print(name) } // Anna // Alex // Brian for name in names[..<2] { print(name) } // Anna // Alex
邏輯運算子
- 邏輯 非 ( !a ):取反
- 邏輯 與 ( a && b ) :短路與。如果第一個值是 false ,那麼第二個值就會被忽略掉了,因為它已經無法讓整個表示式再成為 true 。這就是所謂的 短路計算
- 邏輯 或 ( a || b ):短路或。如果邏輯或運算子左側的表示式為 true ,那麼右側則不予考慮了,因為它不會影響到整個邏輯表示式的結果。
- Swift 語言中邏輯運算子 && 和 || 是左相關的,這意味著多個邏輯運算子組合的表示式會首先計算最左邊的子表示式。
小編為大家整理日常開發需要的邏輯運算希望對你有所幫助,青山不改,綠水長流,感謝每位佳人的支援!