-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

objectswithの合計を取得していて、objectこの操作の関数がないため、エラーが発生しています。

任意の演算子 (+=は演算子です) を使用するには、関数を宣言する必要があります。これらはグローバル関数です。これは、それらが動作するタイプ内に配置されないことを意味します。その下は大丈夫です。


これは、いくつかのプロパティを持つ単なる Type です。

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

2 つ目はinout、左側のインスタンス (lhs) を変更するために使用します。returnこの機能にはありません。左側のインスタンスが更新されるため。

func +=(inout lhs:MyType, rhs:MyType) {
    lhs.myInt += rhs.myInt
    lhs.myString += rhs.myString
}

これらの関数が同じ Type の 2 つのパラメーターを想定していることに注目してください。objectsとが同じタイプでない場合(いずれかが andまたはobjectである可能性があると推測しています)、関連のない 2 つのタイプの合計を取る関数を作成する必要があります。ArrayDictionairy


これは別のタイプです

class MyOtherType {

    var myDouble : Double = 0

}

この関数は、演算子を使用して、関連のない 2 つのタイプの合計を取得します。

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' のオペランドには適用できません


あなたobjectsArray合計関数が次のようになる場合:

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