这可能很简单,但有一个原因,swift不喜欢我的+运算符的实现......
我有一个简单的号码协议:
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
个对象的定义
我做错了什么?
答案 0 :(得分: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.+
,而不是你正在使用的全局函数+
......