1. 常用术语
运算符包括①一元运算符
、②二元运算符
、③三元运算符
:分别指对一个、两个、三个目标进行操作。
受到运算符影响的值叫做操作数
。
如:在表达式 1 + 2
中, +
符号是一个二元运算符,其中的两个值 1
和 2
就是操作数
。
2. 赋值运算符
let b = 10
var a = 5
a = b
// a 的值现在是 10
let (x, y) = (1, 2)
// x 等于 1, 同时 y 等于 2
但,swift的赋值运算符无返回值:
if x = y {
// 这是不合法的, 因为 x = y 并不会返回任何值。
// 这就避免了赋值符号 (=) 被意外地用于比较符号 (==)
}
3. 算数运算符
- 加 ( + ) 加法运算符同时也支持 String 的拼接:
"hello, " + "world" // 结果为: "hello, world"
- 减 ( - )
- 乘 ( * )
- 除 ( / )
余数运算符
9 % 4 // 结果为: 1
-9 % 4 // 结果为: -1
一元加号运算符
为了和一元减号运算符一起出现时对称,为了美。
let minusSix = -6
let alsoMinusSix = +minusSix // alsoMinusSix 依然是 -6
4. 组合赋值符号
+=
-=
*=
/=
%=
,举个栗子🌰:
var a = 1
a += 2 // 相当于 a = a + 2, a 现在是 3
5. 比较运算符
-
值相等 ( a == b )
-
不相等 ( a != b )
-
大于 ( a > b )
-
小于 ( a < b )
-
大于等于 ( a >= b )
-
小于等于 ( a <= b )
-
( === 和 !== )用来判断两个对象的类型是否相同
元组的比较:从左到右的顺序比较大小,一次一个值,直到找到两个不相等的值为止。举个🌰:
(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"
注意: 比较运算符仅支持小于七个元素的元组
6. 三元条件运算符
不使用三元运算符:
let contentHeight = 40
let hasHeader = true
var rowHeight = contentHeight
if hasHeader {
rowHeight = rowHeight + 50
} else {
rowHeight = rowHeight + 20
}
// rowHeight is equal to 90
使用三元运算符:
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
7. 合并空值运算符(??)
a ?? b
等价于 a != nil ? a! : b
, 举个🌰:
let defaultColorName = "red"
var userDefinedColorName: String? // userDefinedColorName 默认为 nil
var colorNameToUse = userDefinedColorName ?? defaultColorName
// 因为userDefinedColorName 为 nil, 所以 colorNameToUse 被设置为 defaultColorName, 即"red"。
8. 区间运算符
闭区间运算符 ( ... )
举个🌰:
for index in 1...5 { // 包含 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
半开区间运算符 ( ..<)
举个🌰:
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count // count 为 4
for i in 0..<count { // 0, 1, 2, 3, 但不包含4.
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
9. 逻辑运算符
- 逻辑 非 ( !a )
- 逻辑 与 ( a && b )
- 逻辑 或 ( a || b )
逻辑非运算符
逻辑非运算符( !a
)转换布尔值, 把true
变成false
, 把false
变成true
。如:
let allowedEntry = false // 变量的命名要简洁易懂,方便逻辑判断
if !allowedEntry { // 这里可以读作,“如果不允许进入”
print("ACCESS DENIED")
}
// 结果为: "ACCESS DENIED"
逻辑与运算符
逻辑与运算符(a && b)
需要逻辑表达式的两个值都为true
,整个表达式的值才为true
。如果第一个值是 false
,第二个值就被忽略,表达式结果直接为false
。🌰 :
let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// 结果为: "ACCESS DENIED"
逻辑或运算符
逻辑或运算符(a || b)
只要有一个为true
,那么整个表达式就是true
。如果逻辑或运算符左侧的表达式为 true
,那么右侧不再考虑,表达式结果直接为false
。🌰 :
let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// 结果为: "Welcome!"
10. 混合逻辑运算
多个逻辑运算符组合,常用小括号分隔,让代码更好理解。🌰 :
let enteredDoorCode = false
let passedRetinaScan = false
let hasDoorKey = false
let knowsOverridePassword = true
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// 结果为: "Welcome!"
网友评论