Swift 含糊不清重载 + 运算符

标签: Xcode Swift
发布时间: 2016/12/26 23:51:57
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

它可能是如此简单,但理由 swift 不喜欢我实现的 + 运算符......
我有一个简单的数字Protocol︰

protocol Number : CustomStringConvertible {

    var doubleValue: Double { get }

}

同样的一个简单的实现︰

struct SimpleNumber : Number {

    let doubleValue: Double
    let description: String

    init(_ double: Double) {
        doubleValue = double
        description = "\(double)"
    }
}

和一条支线,运算符重载︰

extension Number {

    static func + (lhs: Number, rhs: Number) -> Number {
        return SimpleNumber(lhs.doubleValue + rhs.doubleValue)
    }
}

目前为止,一切都好。但现在,当我尝试使用该运算符︰

let number1: Number = SimpleNumber(1)
let number2: Number = SimpleNumber(2)
let number3: Number = number1 + number2;

Xcode 告诉我,该运算符是含糊不清。
那么,为什么呢?我的定义是唯一适合的两个 Number 对象。
我到底做错了?

解决方法 1:

+运算符不应该在扩展,但宁愿全球 func 。替换您定义的 + :

extension Number {    
    static func + (lhs: Number, rhs: Number) -> Number {
        return SimpleNumber(lhs.doubleValue + rhs.doubleValue)
    }
}

与只是

func + (lhs: Number, rhs: Number) -> Number {
    return SimpleNumber(lhs.doubleValue + rhs.doubleValue)
}

它会工作。我猜你做了什么创建一个静态函数 Number.+ ,不是在全球的函数 + ,你使用的...

官方微信
官方QQ群
31647020