Reputation: 759
It is probably so simple, but for a reason swift doesn't like my implementation of the + operator...
I've got a simple number protocol:
protocol Number : CustomStringConvertible {
var doubleValue: Double { get }
}
A simple implementation of the same:
struct SimpleNumber : Number {
let doubleValue: Double
let description: String
init(_ double: Double) {
doubleValue = double
description = "\(double)"
}
}
and an extension for the operator overloading:
extension Number {
static func + (lhs: Number, rhs: Number) -> Number {
return SimpleNumber(lhs.doubleValue + rhs.doubleValue)
}
}
So far, so good. But now, when I try to use that operator:
let number1: Number = SimpleNumber(1)
let number2: Number = SimpleNumber(2)
let number3: Number = number1 + number2;
Xcode tells me, that the operator is ambiguous.
So, why? My definition is the only one that fit's for two Number
objects.
What am I doing wrong?
Upvotes: 2
Views: 297
Reputation: 22487
The +
operator shouldn't be inside the extension, but rather a global func
. Replace your definition of +
:
extension Number {
static func + (lhs: Number, rhs: Number) -> Number {
return SimpleNumber(lhs.doubleValue + rhs.doubleValue)
}
}
with simply
func + (lhs: Number, rhs: Number) -> Number {
return SimpleNumber(lhs.doubleValue + rhs.doubleValue)
}
and it will work. I guess what you have done is created a static function Number.+
, not the global function +
that you are using...
Upvotes: 1