您收到错误,因为您将 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
}
}
这些是操作员的功能。
第一个只是一个+,它返回一个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 和object 不是同一类型(我猜可能是和Array 或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,您的求和函数将如下所示:
func +=<T where T : _ArrayType>(inout lhs:T, rhs:T.Generator.Element) {
lhs.append(rhs)
}