返回

Swift 重写运算符:解构四则运算的奥秘

IOS



在 Swift 中,重写运算符是一种强大的技术,它允许您赋予自定义类型与基础数据类型类似的运算能力。本篇博文将深入探讨 Swift 中重写运算符的精髓,特别是如何使用它们重写四则运算。


理解运算符重写的本质


在 Swift 中,运算符重写允许您自定义 structclass 类型的特定运算符的行为。本质上,它会创建一个新的函数,以现有运算符的名称调用,但适用于您的自定义类型。


重写四则运算


Swift 提供了一系列可用于重写四则运算的运算符:



添加运算符


要重写加法运算符 (+),请在您的自定义类型中定义 static func + 函数。此函数应采用两个参数:lhs(左操作数)和 rhs(右操作数),并返回运算结果。


示例:

struct Point {
    var x: Int
    var y: Int

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


使用此重写,您可以像使用基础数据类型一样使用 + 运算符在 Point 结构体上进行加法操作:

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

let result = point1 + point2 // 结果:Point(x: 4, y: 6)


减法、乘法和除法运算符


您可以使用类似的方法重写减法 (-)、乘法 (*) 和除法 (/) 运算符。只需为这些运算符创建相应的 static func 函数即可。


示例:

struct Fraction {
    var numerator: Int
    var denominator: Int

    static func - (lhs: Fraction, rhs: Fraction) -> Fraction {
        return Fraction(numerator: lhs.numerator * rhs.denominator - rhs.numerator * lhs.denominator,
                        denominator: lhs.denominator * rhs.denominator)
    }
}


比较运算符


Swift 还允许您重写比较运算符,例如 ==(相等)、>(大于)和 <(小于)。这些运算符可以用于比较自定义类型的实例。


示例:

struct Person {
    var name: String
    var age: Int

    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.name == rhs.name && lhs.age == rhs.age
    }
}


使用此重写,您可以比较 Person 结构体的实例:

let person1 = Person(name: "John", age: 30)
let person2 = Person(name: "Jane", age: 30)

let isEqual = person1 == person2 // 结果:true


结论


Swift 中的运算符重写是一种强大的工具,它使您能够赋予自定义类型强大的运算能力。通过重写四则运算和其他运算符,您可以创建功能丰富、易于使用的自定义类型。在开发自定义数据结构和算法时,了解和使用运算符重写至关重要。