Swift 二进制运算符+;=无法应用于该类型的操作数

Swift 二进制运算符+;=无法应用于该类型的操作数,swift,xcode7.2,Swift,Xcode7.2,我有一个错误: 二进制运算符+=不能应用于该类型的操作数 我该怎么修理 func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { if elementName == "item" { inItem = false objects += object } } 我在

我有一个错误:

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

我该怎么修理

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

我在第
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
    }
}
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)
}

这些是操作员的功能

第一个只是一个
+
,它返回一个
MyType
请注意,您需要如何组合所有有意义的属性。 例如,我没有取
myFloat
的和,只取其他属性

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
    }
}
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)。此函数中没有
返回
。因为左侧实例已更新

func +=(inout lhs:MyType, rhs:MyType) {
    lhs.myInt += rhs.myInt
    lhs.myString += rhs.myString
}
请注意这些函数如何期望两个相同类型的参数。如果
对象
对象
不属于同一类型(我猜其中一个可能是和
数组
字典
),那么您需要创建一个函数来获取两个不相关类型的总和


这是另一种类型

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'

在问题中包括
对象
对象
的类型和声明非常重要。此外,请始终复制完整的错误消息,如下所示:

错误:二进制运算符“+”不能应用于“MyType”和“MyOtherType”类型的操作数。


如果
对象
是一个
数组
,则求和函数如下所示:

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

欢迎来到堆栈溢出。由于您没有向我们显示
对象
对象
的声明,并且没有粘贴完整的错误消息(应该包括这两种类型),因此很难帮助您。请编辑您的问题以包含这些信息。我真的很好奇为什么您从错误消息中删除了几乎唯一有用的信息。对我的回答有任何回应吗?如果它对你有帮助,你可以接受它。如果仍然不清楚,请添加评论。抱歉,我不明白:(@MicheleColadangelo updated,如果您不明白,请解释您不明白的内容。