你得到一个错误,因为你正在接受 with 的总和,objects
并且object
这个操作没有函数。
要使用任何运算符(+=
是运算符),您需要为其声明函数。这些是全局函数。这意味着它们不会被放入他们工作的类型中。下就好了。
这只是一个具有一些属性的类型。
class MyType {
var myInt : Int = 0
var myString : String = ""
var myFloat : Float = 0
init(int: Int, string: String, float: Float) {
myInt = int
myString = string
myFloat = float
}
}
这些是操作员的功能。
第一个只是 a +
,它返回一个新实例,MyType
注意您需要如何组合所有有意义的属性。例如,我没有取 的总和myFloat
,只取其他属性。
func +(lhs:MyType,rhs:MyType) -> MyType {
let intSum = lhs.myInt + rhs.myInt
let stringSum = lhs.myString + rhs.myString
return MyType(int: intSum, string: stringSum,float: lhs.myFloat)
}
第二个用于inout
更改左侧实例(lhs)。此功能中没有return
。由于左侧实例已更新。
func +=(inout lhs:MyType, rhs:MyType) {
lhs.myInt += rhs.myInt
lhs.myString += rhs.myString
}
注意这些函数如何期望两个相同类型的参数。如果objects
andobject
不是同一类型(我猜一个可能是 and Array
or Dictionairy
),那么您需要创建一个函数来获取两个不相关类型的总和。
这是另一种类型
class MyOtherType {
var myDouble : Double = 0
}
此函数使用运算符来取两个原本不相关的类型的总和
func +(lhs:MyType,rhs:MyOtherType) -> MyType {
let floatSum = lhs.myFloat + Float(rhs.myDouble)
return MyType(int: lhs.myInt, string: lhs.myString, float: floatSum)
}
一些测试
如果您不编写操作符函数,您将得到:
let alpha = MyType(int: 20, string: "hello ", float: 0.5)
let beta = MyType(int: 22, string: "world", float: 0.75)
let delta = alpha + beta // error: binary operator '+' cannot be applied to two 'MyType' operands
如果你这样做:
let alpha = MyType(int: 20, string: "hello ", float: 0.5)
let beta = MyType(int: 22, string: "world", float: 0.75)
let delta = alpha + beta // 42, "hello world", 0.5
如果您不编写运算符函数来求和MyOtherType
:
let alpha = MyType(int: 20, string: "hello ", float: 0.5)
let beta = MyOtherType()
let delta = alpha + beta // error: binary operator '+' cannot be applied to operands of type 'MyType' and 'MyOtherType'
在您的问题中包含类型和声明非常重要objects
。object
此外,请始终复制完整的错误消息,应该是这样的:
错误:二元运算符“+”不能应用于“MyType”和“MyOtherType”类型的操作数
如果objects
是Array
你的 sum 函数看起来像这样:
func +=<T where T : _ArrayType>(inout lhs:T, rhs:T.Generator.Element) {
lhs.append(rhs)
}