部分基础运算符
运算符有一元、二元和三元运算符:
一元运算符在单个操作数(例如-a)上操作。一元前缀运算符出现在其操作数(例如!b)之前,一元后缀运算符出现在其操作数之后(如c!)。
二元运算符操作两个操作数(例如2 + 3),并且是中缀,因为它们出现在它们的两个操作数之间。
三元运算符操作三个操作数。像C一样,Swift只有一个三元运算符,三元条件运算符(a ? b : c)。
1. 分配运算符
- 该赋值运算符(a = b)初始化或更新的价值a与价值b:
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
- 与C和Objective-C中的赋值运算符不同,Swift中的赋值运算符本身不返回值。以下语句无效:
if x = y {
// This is not valid, because x = y does not return a value.
}
此功能防止在实际使用(==)时意外使用(=)。通过使if x = y
无效,避免这些类型的错误。
2. 算术运算符
- 加法(+)
- 加法运算符也支持String级联:
"hello, " + "world" // equals "hello, world"
- 减法(-)
- 乘法(*)
注意:与C和Objective-C中的算术运算符不同,Swift算术运算符不允许值默认溢出。可以通过使用Swift的溢出运算符(例如a &+ b)选择值溢出行为。溢出计算请看高级运算符。
var sum:Int8 = 0;
sum = 70 + 70; //溢出报错
print(sum)
- 除法(/)
3. 求余运算符
求余数,如例:
sum = -9 % 4; //sum equals -1
sum = 9 % 4; //sum equals -1
sum = -9 % -4; //sum equals -1
sum = 9 % -4; //sum equals -1
如上所示,a % b
的结果和b
的符号没有关系,只与a
的符号有关系。
4. 复合分配操作符
sum += 2 // 等同于 sum = sum + 2
sum -= 2 // 等同于 sum = sum - 2
sum *= 2 // 等同于 sum = sum * 2
sum /= 2 // 等同于 sum = sum / 2
注意:复合分配操作符没有返回值,let b = a += 2
是错误的。
5. 比较运算符
- 等于(a == b)
- 不等于(a != b)
- 大于(a > b)
- 小于(a < b)
- 大于或等于(a >= b)
- 小于或等于(a <= b)
- Swift比较两个字符串是否完全相同时,可以直接使用(==),如:
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".
- 比较元素数量相同、且不超过7个元素、且不包括Bool值元素的元祖;
//当元祖中第一个元素已经得到比较结果时,就不在继续向下比较
(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"
6. 三元条件运算符
question ? answer1 : answer2
,如果question
为true
,执行answer1
;如果为false
,执行answer2
;
格式:
question ? answer1 : answer2
//等同于下面的写法
if question {
answer1
} else {
answer2
}
示例:
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// rowHeight is equal to 90
7. Nil合并运算符
a ?? b
,如果a
为nil
,返回b
;如果a
不为nil
,返回a
;
格式:
a ?? b
//等同于以下代码
a != nil ? a! : 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"
8. 范围运算符
- 闭合范围运算符
(a...b)
,a
不能大于b
,运行范围在[a,b]之间;
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
- 半开范围运算符
(a..,
a
不能大于b
,运行范围在[a,b)之间;
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..
9. 逻辑运算符
逻辑运算符修改或组合Bool逻辑值true
和false
。
- 逻辑NOT
(!a)
- 逻辑AND
(a && b)
- 逻辑OR
(a || b)
注意:&&
和||
是左关联,及从左向右运算,但!
的优先级高于&&
和||
;
参考链接
用来记录平时遇到的问题,不对之处还望指教。