- 賦值運(yùn)算符 (Assignment Operator)
let b = 10
var a = 5
a = b
// a is now equal to 10
let (x, y) = (1, 2)
// x is equal to 1, and y is equal to 2
if x = y {
// This is not valid, because x = y does not return a value.
}
- 算術(shù)運(yùn)算符 (Arithmetic Operators)
Addition (+)
Subtraction (-)
Multiplication (*)
Division (/)
1 + 2 // equals 3
5 - 3 // equals 2
2 * 3 // equals 6
10.0 / 2.5 // equals 4.0
"hello, " + "world" // equals "hello, world"
- 取余運(yùn)算符 (Remainder Operator)
9 % 4 // equals 1(等同于下面的表達(dá)式)
9 = (4 x 2) + 1
-9 % 4 // equals -1
-9 = (4 x -2) + -1
- 一元減運(yùn)算符 (Unary Minus Operator)
let three = 3
let minusThree = -three // minusThree equals -3
let plusThree = -minusThree // plusThree equals 3, or "minus minus three"
- 一元加運(yùn)算符 (Unary Plus Operator)
一元+
運(yùn)算符不對(duì)操作的變量做任何的修改硕糊,返回變量本身
let minusSix = -6
let alsoMinusSix = +minusSix // alsoMinusSix equals -6
- 復(fù)合賦值運(yùn)算符 (Compound Assignment Operators)
var a = 1
a += 2
// a is now equal to 3
NOTE:
復(fù)合賦值運(yùn)算符不返回值敞贡。 例如,你不能寫
let b = a += 2
- 比較運(yùn)算符 (Comparison Operators)
Swift支持所有標(biāo)準(zhǔn)C比較運(yùn)算符:
Equal to (a == b)
Not equal to (a != b)
Greater than (a > b)
Less than (a < b)
Greater than or equal to (a >= b)
Less than or equal to (a <= b)
Swift還提供了兩個(gè)標(biāo)識(shí)運(yùn)算符(
===
和!==
),用于測(cè)試兩個(gè)對(duì)象引用是否都引用同一個(gè)對(duì)象實(shí)例毡们。
1 == 1 // true because 1 is equal to 1
2 != 1 // true because 2 is not equal to 1
2 > 1 // true because 2 is greater than 1
1 < 2 // true because 1 is less than 2
1 >= 1 // true because 1 is greater than or equal to 1
2 <= 1 // false because 2 is not less than or equal to 1
比較運(yùn)算符通常用于條件語句,例如if語句:
let name = "world"
if name == "world" {
print("hello, world")
} else {
print("I'm sorry \(name), but I don't recognize you")
}
// Prints "hello, world", because name is indeed equal to "world".
兩個(gè)元組如果具有相同的類型和相同數(shù)量的值惰匙,也可以比較砂吞,從左到右,一次比較一個(gè)值
(1, "zebra") < (2, "apple") // true because 1 is less than 2; "zebra" and "apple" are not compared
(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"
("blue", -1) < ("purple", 1) // OK, evaluates to true
("blue", false) < ("purple", true) // Error because < can't compare Boolean values
NOTE:
Swift標(biāo)準(zhǔn)庫(kù)包含元組的元組比較運(yùn)算符隔显,少于7個(gè)元素却妨。 要將元組與七個(gè)或更多元素進(jìn)行比較,您必須自己實(shí)現(xiàn)比較運(yùn)算符括眠。
- 三元運(yùn)算符 (Ternary Conditional Operator)
if question {
answer1
} else {
answer2
}
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// rowHeight is equal to 90
上面的示例是下面代碼的簡(jiǎn)寫:
let contentHeight = 40
let hasHeader = true
let rowHeight: Int
if hasHeader {
rowHeight = contentHeight + 50
} else {
rowHeight = contentHeight + 20
}
// rowHeight is equal to 90
- 空合運(yùn)算符 (Nil-Coalescing Operator)
nil-coalescing
運(yùn)算符(a ?? b
)展開,如果a有值就返回a
彪标,如果a
為nil
就返回b
。 表達(dá)式a
始終是可選類型掷豺。 表達(dá)式b
必須與存儲(chǔ)在a
中的類型匹配捞烟。
nil-coalescing
運(yùn)算符是下面代碼的簡(jiǎn)寫:
a != nil ? a! : b
NOTE:
如果a的值不為nil,則不評(píng)估b的值当船。 這被稱為短路求值题画。
let defaultColorName = "red"
var userDefinedColorName: String? // defaults to nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName is nil, so colorNameToUse is set to the default of "red"
userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName is not nil, so colorNameToUse is set to "green"
- 區(qū)間運(yùn)算符 (Range Operators)
1.閉區(qū)間運(yùn)算符(Closed Range Operator)
for index in 1...5 {
print("\(index) times 5 is \(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25
2.半?yún)^(qū)間運(yùn)算符(Half-Open Range Operator)
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
print("Person \(i + 1) is called \(names[i])")
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack
3.單區(qū)間運(yùn)算符 (One-Sided Ranges)
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
- 邏輯運(yùn)算符 (Logical Operators)
Logical NOT (!a)
Logical AND (a && b)
Logical OR (a || b)
1.邏輯非(Logical NOT Operator)
let allowedEntry = false
if !allowedEntry {
print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"
2.邏輯與(Logical AND Operator)
let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"
3.邏輯或(Logical AND Operator)
let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"
4.組合邏輯運(yùn)算符 (Combining Logical Operators)
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"
NOTE
Swift
邏輯運(yùn)算符&&
和||
是左關(guān)聯(lián)的,這意味著具有多個(gè)邏輯運(yùn)算符的復(fù)合表達(dá)式首先評(píng)估最左邊的子表達(dá)式生年。
5.顯式圓括號(hào) (Explicit Parentheses)
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"