如何重载 swift 中的运算符?

How do you overload an operator in swift?

假设你有一个 class C。它有两个实例变量,number 和 vector。 vector 只是一个整数或双精度数组。

我想做以下事情:

c1 = C()
c1.number = 2
c1.vector = [1,2,3]
c2 = C()
c2.number = 3 
c2.vector = [4,6,7]

println(c1.number + c2.number) \print to screen 5
println(c1.vector + c2.vector) \ print [5,8,10]

基本上,我希望重载“+”运算符,以便它知道根据类型使用“+”中的哪个 "version"。

已为 Array 类型定义了 + 运算符。它执行数组合并并将右值的值附加到左值上。要按索引对值求和,您可以这样做:

protocol Numeric { }

extension Double: Numeric {}
extension Int: Numeric {}

func +<T: Numeric>(left: [T], right: [T]) -> [T]? {
    var numElements: Int = 0

    if count(left) != count(right) {
        return nil
    } else {
        numElements = count(left)
    }

    var result = [T]()

    for var i = 0; i < numElements; ++i {
        if let lvalue = left[i] as? Int, rvalue = right[i] as? Int {
            result.append(lvalue + rvalue as! T)
        } else if let lvalue = left[i] as? Double, rvalue = right[i] as? Double {
            result.append(lvalue + rvalue as! T)
        }
    }

    return result
}

但一般来说,我不建议覆盖预定义的运算符,因为很可能在以后造成混乱和混乱。