-2

我有这个错误:

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

我该如何解决?

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

我有这个错误在线objects += object

4

1 回答 1

1

你得到一个错误,因为你正在接受 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
}

注意这些函数如何期望两个相同类型的参数。如果objectsandobject不是同一类型(我猜一个可能是 and Arrayor 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'

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

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


如果objectsArray你的 sum 函数看起来像这样:

func +=<T where T : _ArrayType>(inout lhs:T, rhs:T.Generator.Element) {
    lhs.append(rhs)
}
于 2015-12-20T19:31:42.110 回答