其實
Swift和Objective-C差不多,我這里只把有區(qū)別的記錄一下。
1、運算符分為一元、二元和三元運算符:
- 一元運算符對單一操作對象操作(如 -a)。一元運算符分前置運算符和后置運算符,前置運算符需緊跟在操作對象之前(如 !b),后置運算符需緊跟在操作對象之后(如 c!)。
- 二元運算符操作兩個操作對象(如 2 + 3),是中置的,因為它們出現(xiàn)在兩個操作對象之間。
- 三元運算符操作三個操作對象,和 C 語言一樣,Swift 只有一個三元運算符,就是三目運算符(a ? b : c)。
2、與 C 語言和 Objective-C 不同,Swift 的賦值操作并不返回任何值。所以下面語句是無效的:
if x = y {
// 此句錯誤,因為 x = y 并不返回任何值
}
通過將 if x = y 標(biāo)記為無效語句,Swift 能幫你避免把 (==)錯寫成(=)這類錯誤的出現(xiàn)。
3、加法運算符可以用在String類型的拼接:
"hello, " + "world" // 等于 "hello, world"
注意:
在Swift中出現(xiàn)了溢出運算符來實現(xiàn)溢出運算,但是Objective-C中是不會出現(xiàn)溢出運算。
eg: a &+ b
4、求余數(shù)
9%4 // 等于1
-9%4 // 等于-1
公式:a = (b × 倍數(shù)) + 余數(shù)
結(jié)果:
9 = (4 × 2) + 1
-9 = (4 × -2) + -1
5、比較運算符(Comparison Operators)
??每個比較運算都返回了一個標(biāo)識表達(dá)式是否成立的布爾值。
??在Swift中,比較運算符除了 ==,!=,>,<,>=,<=;還出現(xiàn)了 (恒等)=== 和 (不恒等)!==
??如果兩個元組的元素相同,且長度相同的話,元組就可以被比較。比較元組大小會按照從左到右、逐值比較的方式,直到發(fā)現(xiàn)有兩個值不等時停止。如果所有的值都相等,那么這一對元組我們就稱它們是相等的。例如:
(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
Bool 不能被比較,也意味著存有布爾類型的元組不能被比較。
("blue", -1) < ("purple", 1) // 正常,比較的結(jié)果為 true
("blue", false) < ("purple", true) // 錯誤,因為 < 不能比較布爾類型
注意:
Swift 標(biāo)準(zhǔn)庫只能比較七個以內(nèi)元素的元組比較函數(shù)。如果你的元組元素超過七個時,你需要自己實現(xiàn)比較運算符。
6、三元運算符(Ternary Conditional Operator)
Swift的三元運算符和Objective-C一樣的用法。
不過需要注意的是,濫用三元運算符會降低代碼可讀性。所以我們應(yīng)避免在一個復(fù)合語句中使用多個三元運算符。
7、空合運算符(Nil Coalescing Operator)
空合運算符(a ?? b):對可選類型 a 進(jìn)行空判斷,如果 a 包含一個值就進(jìn)行解包,否則就返回一個默認(rèn)值 b。
`a ?? b`
相當(dāng)于
a != nil ? a! : b
let defaultColorName = "red"
var userDefinedColorName: String? //默認(rèn)值為 nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName 的值為空,所以 colorNameToUse 的值為 "red"
注意:
表達(dá)式a必須是Optional類型。默認(rèn)值b的類型必須要和a存儲值的類型保持一致。
8、區(qū)間運算符(Range Operators)
let names = ["Anna", "Alex", "Brian", "Jack"]
閉區(qū)間運算符:
閉區(qū)間運算符
`(a...b)`: 定義一個包含從 `a` 到 `b`(包括 `a` 和 `b`)的所有值的區(qū)間。
names(0...2)
結(jié)果:
["Anna", "Alex", "Brian"]
半開區(qū)間運算符:
半開區(qū)間運算符
`(a..<b)`: 定義一個從 `a` 到 `b` 但不包括 `b` 的區(qū)間。
names(0..<2)
結(jié)果:
["Anna", "Alex"]
單側(cè)區(qū)間:
單側(cè)區(qū)間運算符
`[a...]`: 從a開始到末尾;
names[2...]
結(jié)果:
["Brian", "Jack"]
names[...2]
結(jié)果:
["Anna", "Alex", "Brian"]
9、邏輯運算符(Logical Operators)
- 邏輯非:(!a)
- 邏輯與:(a && b)
- 邏輯或:(a || b)
用法和Objective-C一樣。
如果是組合運算,最左邊開始判斷。