你如何在swift中超载运算符?

时间:2015-02-16 23:51:14

标签: swift operator-overloading operators

假设您有一个C类。它有两个实例变量,数字和向量。 vector只是一个int或double的数组。

我想做以下事情:

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]

基本上,我希望超载" +"运算符,以便它知道哪个"版本" " +"根据类型使用。

1 个答案:

答案 0 :(得分:0)

已为类型Array定义了+运算符。它执行数组合并并将rvalue的值固定到左值上。要按索引执行值的总和,您可以执行以下操作:

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
}

但一般情况下,我不会建议覆盖预定义的操作员,因为很有可能导致混乱和后来的混乱。