比较运算符 #

一、基本比较运算符 #

1.1 比较运算符列表 #

运算符 描述 示例
== 等于 a == b
!= 不等于 a != b
> 大于 a > b
< 小于 a < b
>= 大于等于 a >= b
<= 小于等于 a <= b

1.2 基本用法 #

swift
let a = 10
let b = 20

print(a == b)
print(a != b)
print(a > b)
print(a < b)
print(a >= b)
print(a <= b)

1.3 比较结果 #

比较运算符返回 Bool 类型的值:

swift
let result1 = 5 > 3
let result2 = 5 < 3
let result3 = 5 == 5
let result4 = 5 != 3

print(result1)
print(result2)
print(result3)
print(result4)

二、字符串比较 #

2.1 相等性比较 #

swift
let str1 = "Hello"
let str2 = "Hello"
let str3 = "World"

print(str1 == str2)
print(str1 == str3)
print(str1 != str3)

2.2 大小比较 #

swift
print("apple" < "banana")
print("Apple" < "apple")
print("abc" < "abcd")

2.3 前缀和后缀比较 #

swift
let filename = "document.pdf"

print(filename.hasPrefix("doc"))
print(filename.hasSuffix(".pdf"))
print(filename.contains("ment"))

三、浮点数比较 #

3.1 精度问题 #

swift
let a = 0.1 + 0.2
let b = 0.3

print(a)
print(b)
print(a == b)

3.2 近似比较 #

swift
func approximatelyEqual(_ a: Double, _ b: Double, tolerance: Double = 0.0001) -> Bool {
    return abs(a - b) < tolerance
}

let a = 0.1 + 0.2
let b = 0.3

print(approximatelyEqual(a, b))

3.3 特殊值比较 #

swift
let nan = Double.nan
let infinity = Double.infinity

print(nan == nan)
print(nan != nan)
print(infinity == Double.infinity)
print(infinity > 1_000_000)

四、恒等运算符 #

4.1 引用类型比较 #

对于类实例,== 比较的是值,=== 比较的是引用:

swift
class Person {
    var name: String
    init(name: String) {
        self.name = name
    }
}

let person1 = Person(name: "张三")
let person2 = Person(name: "张三")
let person3 = person1

print(person1 === person2)
print(person1 === person3)
print(person1 !== person2)

4.2 恒等运算符表 #

运算符 描述
=== 恒等(同一引用)
!== 不恒等(不同引用)

4.3 值类型比较 #

swift
struct Point {
    var x: Int
    var y: Int
}

let point1 = Point(x: 1, y: 2)
let point2 = Point(x: 1, y: 2)

print(point1 == point2)

五、可选值比较 #

5.1 基本比较 #

swift
let a: Int? = 5
let b: Int? = 5
let c: Int? = nil

print(a == b)
print(a == c)
print(a != c)

5.2 可选值与值比较 #

swift
let optional: Int? = 5
let value = 5

print(optional == value)
print(optional != 6)

5.3 nil比较 #

swift
let value: Int? = nil

print(value == nil)
print(value != nil)

if value == nil {
    print("值为空")
}

六、元组比较 #

6.1 相等性比较 #

swift
let tuple1 = (1, 2)
let tuple2 = (1, 2)
let tuple3 = (1, 3)

print(tuple1 == tuple2)
print(tuple1 == tuple3)

6.2 比较限制 #

swift
let tuple1 = (1, "Hello")
let tuple2 = (1, "World")

print(tuple1 == tuple2)

6.3 多元素比较 #

swift
let a = (1, 2, 3)
let b = (1, 2, 4)

print(a < b)

七、自定义比较 #

7.1 实现Equatable协议 #

swift
struct Person: Equatable {
    var name: String
    var age: Int
}

let person1 = Person(name: "张三", age: 25)
let person2 = Person(name: "张三", age: 25)
let person3 = Person(name: "李四", age: 30)

print(person1 == person2)
print(person1 == person3)

7.2 自定义比较逻辑 #

swift
struct Person: Equatable {
    var name: String
    var age: Int
    
    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.name == rhs.name
    }
}

let person1 = Person(name: "张三", age: 25)
let person2 = Person(name: "张三", age: 30)

print(person1 == person2)

7.3 实现Comparable协议 #

swift
struct Person: Comparable {
    var name: String
    var age: Int
    
    static func < (lhs: Person, rhs: Person) -> Bool {
        return lhs.age < rhs.age
    }
    
    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.age == rhs.age
    }
}

let person1 = Person(name: "张三", age: 25)
let person2 = Person(name: "李四", age: 30)

print(person1 < person2)
print(person1 > person2)

八、条件中的应用 #

8.1 if语句 #

swift
let score = 85

if score >= 90 {
    print("优秀")
} else if score >= 60 {
    print("及格")
} else {
    print("不及格")
}

8.2 while循环 #

swift
var count = 0

while count < 5 {
    print(count)
    count += 1
}

8.3 三元运算符 #

swift
let score = 75
let result = score >= 60 ? "及格" : "不及格"
print(result)

九、实际应用 #

9.1 验证输入 #

swift
func validatePassword(_ password: String) -> Bool {
    return password.count >= 8
}

print(validatePassword("123456"))
print(validatePassword("12345678"))

9.2 范围检查 #

swift
func isInRange(_ value: Int, min: Int, max: Int) -> Bool {
    return value >= min && value <= max
}

print(isInRange(5, min: 1, max: 10))
print(isInRange(15, min: 1, max: 10))

9.3 排序 #

swift
let numbers = [3, 1, 4, 1, 5, 9, 2, 6]
let sorted = numbers.sorted { $0 < $1 }
print(sorted)

十、总结 #

本章学习了Swift的比较运算符:

  • 基本比较:==、!=、>、<、>=、<=
  • 恒等运算符:===、!==
  • 字符串比较:相等性和大小比较
  • 可选值比较:nil和值的比较

最佳实践:

  • 注意浮点数精度问题
  • 区分值比较和引用比较
  • 实现Equatable协议支持自定义比较
  • 使用Comparable支持排序

下一章,我们将学习逻辑运算符!

最后更新:2026-03-26