2、基本運算符

其實SwiftObjective-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一樣。
    如果是組合運算,最左邊開始判斷。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容