賦值運算符
var a = 10;
如果賦值的右邊是一個多元組,它的元素可以馬上被分解成多個常量或變量:
let (x, y) = (1, 2)
// 現在 x 等於 1,y 等於 2
與 C 語言和 Objective-C 不同,Swift 的賦值操作並不返回任何值。所以以下代碼是錯誤的:
if x = y {
// 此句錯誤, 因爲 x = y 並不返回任何值
}
這個特性使你無法把(==)錯寫成(=),由於 if x = y 是錯誤代碼,Swift 能幫你避免此類錯誤發生。
算術運算符
Swift 中所有數值類型都支持了基本的四則算術運算符:
- 加法(+)
- 減法(-)
- 乘法(*)
- 除法(/)
與 C 語言和 Objective-C 不同的是,Swift 默認情況下不允許在數值運算中出現溢出情況。但是你可以使用 Swift 的溢出運算符來實現溢出運算(如 a &+ b)。詳情參見溢出運算符。
加法運算符也可用於 String 的拼接:
"hello, " + "world" // 等於 "hello, world"
求餘運算符
a = (b × 倍數) + 餘數
a % b 的結果就是上面的餘數,a爲負數以上格式還是通用。
注意:在對負數 b 求餘時,b 的符號會被忽略。這意味着 a % b 和 a % -b 的結果是相同的。
組合賦值運算符
var a = 1
a += 2
// a 現在是 3
注意:複合賦值運算沒有返回值,let b = a += 2這類代碼是錯誤。這不同於上面提到的自增和自減運算符。
比較運算符(Comparison Operators)
- 等於(a == b)
- 不等於(a != b)
- 大於(a > b)
- 小於(a < b)
- 大於等於(a >= b)
- 小於等於(a <= b)
當元組中的值可以比較時,你也可以使用這些運算符來比較它們的大小。例如,因爲 Int 和 String 類型的值可以比較,所以類型爲 (Int, String) 的元組也可以被比較。相反,Bool 不能被比較,也意味着存有布爾類型的元組不能被比較。
比較元組大小會按照從左到右、逐值比較的方式,直到發現有兩個值不等時停止。如果所有的值都相等,那麼這一對元組我們就稱它們是相等的
(1, "zebra") < (2, "apple") // true,因爲 1 小於 2
(3, "apple") < (3, "bird") // true,因爲 3 等於 3,但是 apple 小於 bird
(4, "dog") == (4, "dog") // true,因爲 4 等於 4,dog 等於 dog
注意:Swift 標準庫只能比較七個以內元素的元組比較函數。如果你的元組元素超過七個時,你需要自己實現比較運算符。
三目運算符(Ternary Conditional Operator)
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// rowHeight 現在是 90
空合運算符(Nil Coalescing Operator)
空合運算符(a ?? b)將對可選類型 a 進行空判斷,如果 a 包含一個值就進行解封,否則就返回一個默認值 b。表達式 a 必須是 Optional 類型。默認值 b 的類型必須要和 a 存儲值的類型保持一致。
空合運算符是對以下代碼的簡短表達方法:
a != nil ? a! : b
上述代碼使用了三目運算符。當可選類型 a 的值不爲空時,進行強制解封(a!),訪問 a 中的值;反之返回默認值 b。無疑空合運算符(??)提供了一種更爲優雅的方式去封裝條件判斷和解封兩種行爲,顯得簡潔以及更具可讀性。
注意: 如果 a 爲非空值(non-nil),那麼值 b 將不會被計算。這也就是所謂的短路求值。
下文例子採用空合運算符,實現了在默認顏色名和可選自定義顏色名之間抉擇:
let defaultColorName = "red"
var userDefinedColorName: String? //默認值爲 nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName 的值爲空,所以 colorNameToUse 的值爲 "red"
閉區間運算符
閉區間運算符(a…b)定義一個包含從 a 到 b(包括 a 和 b)的所有值的區間。a 的值不能超過 b。 閉區間運算符在迭代一個區間的所有值時是非常有用的,如在 for-in 循環中:
for index in 1...5 {
print("\(index) * 5 = \(index * 5)")
}
// 1 * 5 = 5
// 2 * 5 = 10
// 3 * 5 = 15
// 4 * 5 = 20
// 5 * 5 = 25
半開區間運算符
半開區間運算符(a..<b)
定義一個從 a 到 b 但不包括 b 的區間。 半開區間的實用性在於當你使用一個從 0 開始的列表(如數組)時,非常方便地從0數到列表的長度。
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
print("第 \(i + 1) 個人叫 \(names[i])")
}
// 第 1 個人叫 Anna
// 第 2 個人叫 Alex
// 第 3 個人叫 Brian
// 第 4 個人叫 Jack
邏輯運算符(Logical Operators)
邏輯運算符的操作對象是邏輯布爾值。Swift 支持基於 C 語言的三個標準邏輯運算。
- 邏輯非(!a)
- 邏輯與(a && b)
- 邏輯或(a || b)
可以使用括號來明確優先級