我们主要了解一下swift中的常用运算符及swift的高级运算符,如何自动移运算符并为自己定义的类型实现标准运算符。
赋值运算符
赋值运算符 (a = b) 用 b 的值初始化或更新 a 的值:
let b = 5
var a = b
复制代码
如果赋值的右边是一个有多个值的元组,它的元素可以一次分解成多个常量或变量:
let (x, y) = (10, 2)
复制代码
与C语言和OC不同的是赋值运算不会反回,以下代码是无效的
if a = b {
}
复制代码
算术运算符
swift支持基本的四种算数类型:+-*/
// 1 + 2
// 5 - 4
// 6 * 7
// 8 / 9
复制代码
swift也支持字符串相加
"hello, " + "world" // hello, world
复制代码
余数运算符
余数运算符 (a % b) 计算出 a 中适合 b 的多少倍数,并返回剩余的值(称为余数)。
let a = 10%4
print("\(a)") // 2
复制代码
复合赋值运算符
与 C 一样,Swift 提供了复合赋值运算符,将赋值 (=) 与另一个操作结合起来。
// +=
var a = 1
a += 2 // 3
// -=
var a = 3
a -= 1 // 2
复制代码
比较运算符
swift支持以下比较运算符
- 相等 (a == b)
- 不同 (a != b)
- 大于 (a > b)
- 小于 (a < b)
- 大于等于 (a >= b)
- 小于等于 (a <= b)
var a = 4
var b = 4
if a == b {
print("ab相等")
}
b = 5
if a != b {
print("ab不想等")
}
if a < b {
print("a小于b")
}
if b > a {
print("b大于a")
}
if a <= b {
print("a小于等于b")
}
b = 4
if a >= b {
print("a大于等于4")
}
复制代码
三元条件运算符
三元运算格式为 结果为布尔的条件判断 ? 为true结果1 : 为flase结果2
var a = 4
var b = 4
let c = a == b ? "相等" : "不相等" // 相等
复制代码
零合并算子
nil 合并运算符 (a ?? b) 解开一个可选的 a 如果它包含一个值,或者如果 a 是 nil 则返回一个默认值 b。 表达式 a 始终是可选类型。 表达式 b 必须匹配存储在 a 中的类型。
零合并运算符是以下代码的简写:
a != nil ? a! : b
复制代码
上面的代码使用三元条件运算符和强制解包 (a!) 当 a 不为 nil 时访问包裹在 a 中的值,否则返回 b。 零合并运算符提供了一种更优雅的方式,以简洁易读的形式封装这种条件检查和展开。
let defaultColorName = "red"
var userDefinedColorName: String? // 默认nil
var colorNameToUse = userDefinedColorName ?? defaultColorName // red
复制代码
范围运算符
swift包含多个范围运算符,它们是表达一系列值的快捷方式。
封闭范围运算符
a…b定义了a到b范围内的值,包含a和b,a不能大于b,一半配合for in 使用
for a in 1...5 {
print("\(a)")
// 1
// 2
// 3
// 4
// 5
}
复制代码
半开范围运算符
半开范围运算符 (a..<b) 定义了从 a 到 b 的范围,但不包括 b。 据说它是半开的,因为它包含它的第一个值,但不包含它的最终值。 与闭区间运算符一样,a 的值不得大于 b。 如果 a 的值等于 b,则结果范围将为空。我们通常可以用于展开数组
let array = ["1","2","3","4","5"]
for i in 0..<array.count {
print(array[i])
// 1
// 2
// 3
// 4
// 5
}
复制代码
单边范围
在一个方向尽可能延续的方向,例如一个数组从开始到下标index或者index到数组结尾的所有元素。在这些情况下,您可以省略范围运算符一侧的值。这种范围称为单边范围,因为运算符只有一侧有值。
// 遍历下标0开始一直到结尾的所有元素
let array = ["1","2","3","4","5"]
for a in array[0...] {
print(a)
// 1
// 2
// 3
// 4
// 5
}
// 遍历开始到下标2的所有元素
let array = ["1","2","3","4","5"]
for a in array[...2] {
print(a)
// 1
// 2
// 3
}
复制代码
半开单边范围
半开单边范围也是单边范围的一种,区别在于不好喊下标index的元素
// 可以遍历数组全部元素
let array = ["1","2","3","4","5"]
for a in array[..<array.count] {
print(a)
// 1
// 2
// 3
// 4
// 5
}
复制代码
逻辑运算符
swift主要包含一下三个标准逻辑运算符
- 逻辑非a!
- 逻辑且 a && b
- 逻辑或 a || b
逻辑非运算符
逻辑非主要改变原来的布尔值,将true改成false,false变成true
let a = true
var b = !a // b 为flase
b = !b // true
复制代码
逻辑且
逻辑且指的是&&左右的布尔都为true的时候结果为true,一真一假为false,都是false结果为false
true && true // true
true && false // false
false && false // false
复制代码
逻辑或
逻辑或指的是|| 两边只要有一个为true结果为true,只有都为false的时候结果才是false
true || true // true
true || false // true
false || false // false
复制代码
组合逻辑运算符
Swift 逻辑运算符 && 和 || 是左关联的,这意味着具有多个逻辑运算符的复合表达式首先评估最左边的子表达式。
a = false
b = ture
c = false
d = true
a && b || c || d // 分解组合逻辑符
ab = a && b // false
abc = ab || c // false
abcd = abc || d // true
复制代码
我们在使用组合逻辑运算符可以使用括号来表达优先级,利于代码阅读。