运算符
运算符的改进
- 赋值符号
=
不会返回值,以防被误用于==
的意图上 - 算数符号
+, -, *, /, %
以及其他,可以检测并阻止溢出
余数运算符 a % b
- 当
a
是负数时也是用相同的方法来进行计算 - 当
b
是负数时,它的正负号被忽略掉了,这意味着a % b
与a % -b
能够获得相同的答案
溢出运算符
在默认情况下,当向一个整数赋值超过它容量的值时, Swift
会报错,而不是生成一个无效的数
- 溢出加法
&+
- 溢出减法
&-
- 溢出乘法
&*
数值可以出现向上溢出或向下溢出的情况
下图为无符号溢出
与无符号溢出一样,当出现上溢时,会从最大数,变成最小数。发生下溢时,会从最小数变成最大数
下图为有符号溢出
let num1: UInt8 = 250
let num2 = num1 &+ 1
print(num2)
合并空值运算符
a ?? b
如果a
有值则展开,为nil
则返回b
- 表达式
a
必须是一个可选类型,表达式b
必须与a
的存储类型相同
func addTwoNum(num1: Int?, num2: Int?) -> Int {
return (num1 ?? 0) + (num2 ?? 0)
}
区间运算符
闭区间运算符 a...b
定义了从 a
到 b
的一组范围,并且包含 a
和 b
, a
的值不能大于 b
for index in 1...5{
print("\(index) times 5 is \(index * 5)")
}
半开区间运算符
a..<b
定义了从 a
到 b
但不包括 b
的区间
同区间运算符,
a
的值不能大于b
,如果a
与b
相等,那返回值为空
let name = ["123", "456", "789"]
let count = name.count
for i in 0..<count{
print("name is \(names[i])")
}
单侧区间
一个包含数组所有元素的区间,从索引 2 到数组的结束。在这种情况下,你可以省略区间运算符一侧的值
从 2~结束
for name in names[2...] {
print(name)
}
从开始~2
for name in names[...2] {
print(name)
}
从 0~1
for name in names[..<2] {
print(name)
}
倒序索引
可以使用 reversed()
方法进行倒序遍历
for i in (0..<10).reversed() {
print(i)
}
其他
区间运算符可以作用在 Comparable
类型上
let welcome = "hello,world"
let interval = "a"..."z"
for c in welcome {
if !interval.contains(String(c)) {
print("\(c) 不是小写字母")
}
}
位运算
位取反运算符
用 ~
表示取反
位与运算符
用 &
表示与运算符
位或运算符
用 |
表示或运算符
位异或运算符
用 ^
表示异或运算符
位左、右移运算符
用 <<
和 >>
表示左、右移运算符
Comments | NOTHING