二元运算符 += 不能应用于该类型的操作数

Binary operator += cannot be applied to operands of the type

我有这个错误:

Binary operator += cannot be applied to operands of the type.

我该如何解决?

func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
    if elementName == "item" {
        inItem = false
        objects += object
    }
}

我在 objects += object

行有这个错误

您收到一个错误,因为您正在计算 objectsobject 的总和,并且此操作没有函数。

要使用任何运算符(+= 是运算符),您需要为其声明函数。这些是全局函数。这意味着它们不会被放入它们所处理的类型中。在下就好了


这只是一个具有一些属性的类型。

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
    }
}

这些是操作员的功能。

第一个只是 +,它 returns 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
}

注意这些函数如何期望两个相同类型的参数。如果 objectsobject 不是同一类型(我猜一个可能是 ArrayDictionairy)那么你需要创建一个函数来计算两个不相关的类型。


这是另一种类型

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'

在您的问题中包含 objectsobject 的类型和声明很重要。此外,始终复制完整的错误消息,它应该像这样:

错误:二元运算符 '+' 不能应用于 'MyType' 和 'MyOtherType'

类型的操作数

如果 objects 是一个 Array,您的求和函数将如下所示:

func +=<T where T : _ArrayType>(inout lhs:T, rhs:T.Generator.Element) {
    lhs.append(rhs)
}