首页 Swift中的运算符
文章
取消

Swift中的运算符

赋值运算符

赋值运算符 = 用来给变量或常量赋值,其语法如下:

1
2
3
let value = 10
var result = 0
result = value

在上面的例子中,我们先定义了一个常量 value,并初始化为 10,然后定义了一个变量 result 并初始化为 0,最后将 value 的值赋给 result

算术运算符

Swift 中的算术运算符包括加减乘除和取余操作等。其中加法运算符 + 既可以用于两个数之间的运算,也可以用于字符串之间的拼接。例如:

1
2
3
4
5
6
7
let a = 10
let b = 20
let c = a + b // c = 30

let str1 = "Hello"
let str2 = "Swift"
let str3 = str1 + " " + str2 // str3 = "Hello Swift"

减法运算符 - 用于两个数之间的减法,乘法运算符 * 用于两个数之间的乘法,除法运算符 / 用于两个数之间的除法。例如:

1
2
3
4
5
6
7
8
9
10
11
let a = 10
let b = 20
let c = a - b // c = -10

let x = 3
let y = 4
let z = x * y // z = 12

let m = 20
let n = 7
let p = m / n // p = 2

取余操作使用 % 运算符,表示两个数相除后的余数。例如:

1
2
3
let a = 17
let b = 5
let c = a % b // c = 2

复合赋值运算符

Swift 提供了一系列复合赋值运算符,用于进行多种运算操作。例如,+= 运算符可以将右侧的值加到左侧的变量上,并将结果再次赋给左侧的变量;-= 运算符可以将右侧的值从左侧的变量中减去,并将结果再次赋给左侧的变量。其他的复合赋值运算符还包括 *=, /=, %= 等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var a = 10
a += 5 // a = 15

var b = 20
b -= 10 // b = 10

var c = 3
c *= 2 // c = 6

var d = 10
d /= 3 // d = 3

var e = 17
e %= 5 // e = 2

比较运算符

Swift 中的比较运算符用于比较两个值大小关系,返回一个布尔值(true/false)。比较运算符包括:小于 <,大于 >,小于等于 <=,大于等于 >=,等于 == 和不等于 !=。例如:

1
2
3
4
5
6
7
8
9
10
11
let a = 10
let b = 20
let c = a < b // c = true

let x = 3
let y = 4
let z = x <= y // z = true

let m = 20
let n = 7
let p = m == n // p = false

比较运算符通常用于条件语句中,如 if 语句、while 循环等,以及用于排序、查找等算法中。

三目条件运算符

Swift 中的三目条件运算符 ? : 用于在两个值之间进行选择。其基本语法如下:

1
condition ? expression1 : expression2

其中 condition 是一个布尔表达式,如果为 true,则返回 expression1 的值,否则返回 expression2 的值。例如:

1
2
3
let a = 10
let b = 20
let c = a > b ? a : b // c = 20

在上面的例子中,如果 a 大于 b,则返回 a 的值,否则返回 b 的值。

空合并运算符

Swift 中的空合并运算符 ?? 用于处理可选类型的值。当一个可选类型的值为空时,可以使用空合并运算符来提供一个默认值,避免空值引起的异常。其基本语法如下:

1
optionalValue ?? defaultValue

其中 optionalValue 是一个可选类型的值,如果有值则返回该值,否则返回 defaultValue。例如:

1
2
let optionalString: String? = nil
let result = optionalString ?? "Hello" // result = "Hello"

在上面的例子中,由于 optionalString 为空,因此返回了默认值 "Hello"

区间运算符

Swift 中的区间运算符包括闭区间运算符和半开区间运算符,用于表示一定范围内的值。闭区间运算符用 ... 表示,包含指定范围内所有的值;半开区间运算符用 ..< 表示,包含左侧的值但不包含右侧的值。例如:

1
2
let closedRange = 1...5 // 包含 1、2、3、4、5 这五个数
let halfOpenRange = 1..<5 // 包含 1、2、3、4 这四个数

区间运算符常用于循环遍历等场景中。

位运算符

Swift 中的位运算符用于对二进制数进行操作。常见的位运算符包括按位取反 ~、按位与 &、按位或 |、按位异或 ^、左移运算符 << 和右移运算符 >>。例如:

1
2
3
4
5
6
7
8
let a: UInt8 = 0b00001111
let b: UInt8 = 0b11110000
let c = ~a // c = 0b11110000
let d = a & b // d = 0b00000000
let e = a | b // e = 0b11111111
let f = a ^ b // f = 0b11111111
let g = b << 2 // g = 0b11000000
let h = b >> 2 // h = 0b00111100

在上面的例子中,我们定义了两个二进制数 ab,然后对它们进行了按位取反、按位与、按位或、按位异或、左移和右移等操作。

溢出运算符

Swift 中的溢出运算符用于处理数值超过数据类型所能容纳范围的情况。Swift 提供了一系列溢出运算符,包括加法溢出运算符 &+、减法溢出运算符 &-、乘法溢出运算符 &* 和除法溢出运算符 &/,以及对应的复合赋值运算符。例如:

1
2
3
4
5
6
7
8
9
var a: Int8 = 127
a = a &+ 1 // a = -128

var b: Int8 = -128
b = b &- 1 // b = 127

var c: Int8 = 10
var d: Int8 = 20
let (e, overflow) = c.multipliedReportingOverflow(by: d) // e = 200, overflow = false

在上面的例子中,我们分别使用了加法溢出运算符、减法溢出运算符、乘法溢出运算符和除法溢出运算符对数值进行了操作,并用 multipliedReportingOverflow(by:) 方法来检查是否发生了溢出。

运算符重载

Swift 中的运算符可以通过运算符重载来自定义类型的行为。例如,我们可以为一个自定义的结构体添加加法运算符 +,来实现两个结构体相加的功能。运算符重载通常用于自定义类型的数学运算、比较和逻辑运算等操作。例如:

1
2
3
4
5
6
7
8
9
10
11
struct Vector2D {
    var x = 0.0, y = 0.0
}

func +(lhs: Vector2D, rhs: Vector2D) -> Vector2D {
    return Vector2D(x: lhs.x + rhs.x, y: lhs.y + rhs.y)
}

let v1 = Vector2D(x: 1.0, y: 2.0)
let v2 = Vector2D(x: 3.0, y: 4.0)
let v3 = v1 + v2 // v3 = Vector2D(x: 4.0, y: 6.0)

在上面的例子中,我们为自定义的结构体 Vector2D 添加了加法运算符 +,并实现了两个向量相加的操作。

运算符函数

运算符函数是指用来实现运算符功能的函数。在 Swift 中,可以将一些函数定义为运算符函数,并将其作为运算符使用。

例如,以下代码定义了一个名为 +* 的运算符函数,它接受三个参数:两个 Double 值和一个 Float 值。该函数将前两个值相加,然后再乘以第三个值:

1
2
3
4
5
func +*(left: Double, right: Double, factor: Float) -> Double {
    return (left + right) * Double(factor)
}

let result = 2.0 +* 3.0, 1.5  // 等于 7.5

上述代码中,我们定义了一个名为 +* 的运算符函数,它接受三个参数:两个 Double 值和一个 Float 值。该函数将前两个值相加,然后再乘以第三个值。最后,我们使用 +* 运算符对两个数进行运算。

自定义运算符

除了运算符重载外,Swift 还提供了一种更加灵活和强大的方式来自定义运算符,即自定义运算符。使用 operator 关键字声明一个新的运算符,然后使用 prefix, infix 或者 postfix 修饰符来指定运算符的类型。例如:

1
2
3
4
5
6
7
8
9
10
prefix operator ++
extension Int {
    static prefix func ++(value: inout Int) -> Int {
        value += 1
        return value
    }
}

var a = 10
let b = ++a	// b = 11, a = 11

在上面的例子中,我们定义了一个前缀运算符 ++,用于将一个整数加 1 并返回其值。然后通过 extension 关键字将这个运算符添加到 Int 类型中。最后,我们使用 ++ 运算符对变量 a 进行操作。

本文由作者按照 CC BY 4.0 进行授权

iOS中Font Awesome图标字体的使用

Swift中的字符串和字符