假设您有一个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]
基本上,我希望超载" +"运算符,以便它知道哪个"版本" " +"根据类型使用。
答案 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
}
但一般情况下,我不会建议覆盖预定义的操作员,因为很有可能导致混乱和后来的混乱。