Swift--基本運算子
文章摘要
- 1、運算子
注意點
- 加法可以用於 String 的拼接
- ===, !== 判斷兩個物件是否為同一個物件例項
- Swift 標準庫只能比較七個以內元素的元組比較函式
- 空合運算子(a ?? b)將對可選型別 a 進行空判斷,如果 a 包含一個值就進行解封,否則就返回一個預設值 b。表示式 a 必須是 Optional 型別。預設值 b 的型別必須要和 a 儲存值的型別保持一致。
- a...b a ..< b names[2...] names[...2] names[..<2]
-------正文-------
//運算子是檢查、改變、合併值的特殊符號或短語。
術語
//一元、二元、三元運算子 運算元
- 一元運算子對單一操作物件操作(如 -a)。一元運算子分前置運算子和後置運算子,前置運算子需緊跟在操作物件之前(如 !b),後置運算子需緊跟在操作物件之後(如 c!)。
- 二元運算子操作兩個操作物件(如 2 + 3),是中置的,因為它們出現在兩個操作物件之間。
- 三元運算子操作三個操作物件,和 C 語言一樣,Swift 只有一個三元運算子,就是三目運算子(a ? b : c)。
受運算子影響的值叫運算元,
賦值運算子 =
let b = 10
var a = 5
a = b
let (x, y) = (1, 2)
//與 C 語言和 Objective-C 不同,Swift 的賦值操作並不返回任何值。
//if x = y {
// //此句錯誤,因為 x = y 並不返回值
//}
算數運算子
- 加法(+)
- 減法(-)
- 乘法(*)
- 除法(/)
1 + 2
5 - 3
2 * 3
10.0 / 2.5
Swift 預設情況下不允許在數值運算中出現溢位情況:a &+ b
加法可以用於 String 的拼接
"hello, " + "world"
求餘運算子
求餘運算子(a % b)是計算 b 的多少倍剛剛好可以容入a,返回多出來的那部分(餘數)。
9 % 4
-9 % 4
一元負號運算子 -
字首 負號(即一元負號符),與數字之間沒有空格
let three = 3
let minusThree = -three
let plusThree = -minusThree
一元正號運算子 +
一元正號符(+)不做任何改變地返回運算元的值:
let minusSix = -6
let alsoMinusSix = +minusSix //alsoMinusSix = -6
組合賦值運算子 +=
a = 1
a += 2 // a = a + 2
a -= 2
a /= 2
a *= 3
- 複合賦值運算沒有返回值,let b = a += 2這類程式碼是錯誤。這不同於上面提到的自增和自減運算子。
比較運算子 Comparison Operators
a = b, a != b, a > b, a < b, a >= b, a <= b
===, !== 判斷兩個物件是否為同一個物件例項
1 == 1
2 != 1
2 > 1
2 < 2
1 < 2
1 >= 1
2 <= 1
let name = "world"
if name == "world" {
print("hello, world")
} else {
print("I'm sorry \(name),but I don't recognize you")
}
如果兩個元組的元素相同,且長度相同的話,元組就可以被比較。
/元組比較 比較元組大小會按照從左到右、逐值比較的方式,直到發現有兩個值不等時停止。如果所有的值都相等,那麼這一對元組我們就稱它們是相等的
(1, "zebra") < (2, "apple")
(3, "apple") < (3, "bird")
(4, "dog") == (4, "dog")
("blue", -1) < ("purple", 1) // 正常,比較的結果為 true
("blue", false) < ("purple", true) // 錯誤,因為 < 不能比較布林型別
- Swift 標準庫只能比較七個以內元素的元組比較函式。如果你的元組元素超過七個時,你需要自己實現比較運算子。
三目運算子 (Ternary Conditonal Operator)
問題 ?答案1 : 答案2
if question {
answer1
} else {
answer2
}
let contentHeight = 40
let hasHeader = true
var rowHeight = contentHeight + (hasHeader ? 50 : 20)
rowHeight = contentHeight
if hasHeader {
rowHeight = rowHeight + 50
} else {
rowHeight = rowHeight + 20
}
空合運算子(Nil Coalescing Operator) a ?? b
空合運算子(a ?? b)將對可選型別 a 進行空判斷,如果 a 包含一個值就進行解封,否則就返回一個預設值 b。表示式 a 必須是 Optional 型別。預設值 b 的型別必須要和 a 儲存值的型別保持一致。
//a != nil ? a! : b //短路求知
let defaultColorName = "red"
var userDefinedColorName: String? //預設為nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName
區間運算子 Range Operators
閉區間運算子 a...b //從 a 到 b 包含 a 和 b
for index in 1...5 {
print("\(index) * 5 = \(index * 5)")
}
半開區間運算子 a ..< b //從 a 到 b 但不包含 b
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
print("第\(i + 1) 個人叫 \(names[i])")
}
單側區間
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
//檢視一個單側區間是否包含某個特定的值
let range = ...5
range.contains(7) // false
range.contains(4) // true
range.contains(-1) // true
邏輯運算子 Logical Operators
邏輯非 !a
let allowedEntry = false
if !allowedEntry {
print("ACCESS DENIED")
}
邏輯與 a && b
let enterDoorCode = true
let passedRetinaScan = false
if enterDoorCode && passedRetinaScan {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
邏輯或 a || b
let hasDoorKey = false
let knowsOveridePassword = true
if hasDoorKey || knowsOveridePassword {
print("Welcome")
} else {
print("ACCESS DENIED")
}
邏輯運算子組合計算
if enterDoorCode && passedRetinaScan || hasDoorKey || knowsOveridePassword {
print("Welcome")
} else {
print("ACCESS DENIED")
}
使用括號來明確優先順序
if (enterDoorCode && passedRetinaScan) || hasDoorKey || knowsOveridePassword {
print("Welcome")
} else {
print("ACCESS DENIED")
}
- Swift 邏輯操作符 && 和 || 是左結合的,這意味著擁有多元邏輯操作符的複合表示式優先計算最左邊的子表示式。
相關文章
- Bash基本運算子
- shell指令碼——基本運算子指令碼
- java基本語法--運算子Java
- 運算子 運算子
- 02python開發之基本運算子Python
- java基礎一:基本型別,運算子號Java型別
- GO語言————4.5 基本型別和運算子Go型別
- php運算子 比較運算子 邏輯運算子 三元運算子PHP
- 運算子-賦值運算子賦值
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- 運算子的關係,什麼叫一元運算子,二元運算子,三元運算子,運算子優先順序,以及運算子的
- 【Linux入門】Shell基本運算子的分類有哪些?Linux
- 運算子
- javascript中&&運算子和||運算子的使用JavaScript
- 算術運算子裡的特殊運算子
- Python 運算子優先順序 運算子Python
- Python學習-算術運算子,賦值運算子和複合運算子Python賦值
- java零基礎自學第一天②,運算子:表示式,算術運算子,+操作,賦值運算子,自增自減運算子,關係運算子,邏輯運算子,三元運算子Java賦值
- php運算子運用之型別運算子該如何使用PHP型別
- 4.從輸入輸出到基本運算子的學習
- day02 Java基本語法( 上 ): 變數與運算子Java變數
- C++ 迭代器運算子 箭頭運算子->C++
- JS-11 運算子之布林運算子JS
- Java 運算子Java
- Java運算子Java
- js運算子JS
- JavaScript in 運算子JavaScript
- 身份運算子
- JavaScript運算子JavaScript
- oracle運算子Oracle
- JavaScript -= 運算子JavaScript
- JavaScript += 運算子JavaScript
- JavaScript *= 運算子JavaScript
- JavaScript %= 運算子JavaScript
- JavaScript |= 運算子JavaScript
- JavaScript <<= 運算子JavaScript
- JavaScript >>>= 運算子JavaScript
- JavaScript >>= 運算子JavaScript