术语
运算符分为一元,二元,三元运算符
- 一元运算符对单一操作对象进行操作(如
-a
),一元运算符又分前置前置运算符和后置运算符,前置运算符紧跟操作对象之前(如!b
),后置运算符紧跟操作运算符之后(如c!
) - 二元运算符操作两个对象(如
2+3
),是中置的,放在两个操作对象中间 - 三元运算符,和c语言一样,swift只有一种三元运算符,就是三目运算符(
a?b:c
)
受运算符影响的较操作数,在表达式1+2
中,+
就是运算符,1
和2
就是操作数
赋值运算符
赋值运算符a=b
,表示用b的值来初始化或者更新a
a=b
不返回任何值
算术运算符
swift中所有的数值类型都支持来基本的四则算术运算符
- 加法(
+
) - 减法(
-
) - 乘法(
*
) - 除法(
/
)
加法运算符可以拼接字符串
var addStr = "i am" + "Edison"
求余运算符
求余运算符(a%b)是计算 b
的多少倍刚好可以容下a
,返回多出来的那部分(余数)
注意:
求余运算符(%)在其他语言也叫取模运算符。但是严格说来,我们看该运算符对负数的操作结果,「求余」比「取模」更合适些
9 % 4 // 等于 1
为了得到a % b
的结果,%
计算了以下等式,并输出余数作为结果:
a = (b × 倍数) + 余数
在对负数 b 求余时,b 的符号会被忽略。这意味着 a % b
和 a % -b
的结果是相同的
组合赋值运算符
跟c语言一样,Swift 也提供把其他运算符和赋值运算(=
)组合的组合赋值运算符,组合加运算(+=
)(-=
) 等等
复合赋值运算没有返回值,所以
let b = a+=5
是错误的
比较运算符
原标准的c语言中的比较运算符都可以在swift中使用
- 等于
==
- 不等于
!=
- 大于
>
- 小于
<
- 大于等于
>=
- 小于等于
<=
每个比较运算都返回了一个标识表达式是否成立的布尔值
比较运算多用于条件语句,如if
条件
空合运算符
空合运算符(a ?? b
) 将对可选类型a进行空判断,如果a
包含一个值就进行解封,否则就返回一个默认值b
,表达式a
必须是optional类型,默认值b
的类型必须要对a
储存值的类型保持一致
空合运算符是对一下代码的简短表达方式
a != nil ? a! : b
上述代码使用了三目运算符。当可选类型a
的值不为空时,进行强制解封(a!
),访问 a
中的值;反之返回默认值 b
。无疑空合运算符(??
)提供了一种更为优雅的方式去封装条件判断和解封两种行为,显得简洁以及更具可读性
区间运算符
闭区间运算符
闭区间运算符(a...b
) 定义了一个包含 从a
到 b
(包括a
和b
)的所有值的区间,a
的值不能超过b
的值,闭区间运算符在迭代一个区间的所有值时是非常有用的,如在 for-in
循环中:
for index in 1...6 {
print(index)
}
上面的例子中,index
是一个每次循环遍历开始时被自动赋值的常量。这种情况下,index
在使用前不需要声明,只需要将它包含在循环的声明中,就可以对其进行隐式声明,而无需使用let
关键字声明。
如果你不需要区间序列内每一项的值,你可以使用下划线(_
)替代变量名来忽略这个值:
let base = 3
let power = 10
var answer = 1
for _ in 1...power {
answer *= base
}
print("\(base) to the power of \(power) is \(answer)")
// 输出 "3 to the power of 10 is 59049"
半开区间运算符
半开区间运算符(a..<b
)定义一个从a
到 b
但不包括b
�的区间
之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。
半开区间的实用性在于当你使用一个从 0 开始的列表(如数组)时,非常方便地从0数到列表的长度
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
print("第 \(i + 1) 个人叫 \(names[i])")
}
// 第 1 个人叫 Anna
// 第 2 个人叫 Alex
// 第 3 个人叫 Brian
// 第 4 个人叫 Jack
单侧区间
闭区间操作符有另一个表达形式,可以表达往一侧无限延伸的区间 —— 例如,一个包含了数组从索引 2 到结尾的所有值的区间。在这些情况下,你可以省略掉区间操作符一侧的值。这种区间叫做单侧区间,因为操作符只有一侧有值
let names = ["Anna", "Alex", "Brian", "Jack","Fucy","Nacy","Lugy"]
let count = names.count
for j in [...4] {
print(names[j])
}
/*
["Anna", "Alex", "Brian", "Jack", "Fucy"]
*/
let names = ["Anna", "Alex", "Brian", "Jack","Fucy","Nacy","Lugy"]
let count = names.count
for j in [1...] {
print(names[j])
}
/*
["Alex", "Brian", "Jack", "Fucy", "Nacy", "Lugy"]
*/
半开区间操作符也有单侧表示形式
[..<2]
[..<2]
逻辑运算符
- 逻辑非(
!a
) - 逻辑与(
a && b
) - 逻辑或(
a || b
)