Jofkos
Jofkos

Reputation: 759

Swift ambiguous overloaded + operator

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

Answers (1)

Grimxn
Grimxn

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

Related Questions