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

时间:2018-09-06 12:00:58

标签: swift xcode

我正在练习一些代码,提出了一些问题。

这是代码

class Food {
    let name:String
    var fruits:[Fruits]?

    init(name:String) {
        self.name = name
    }

}


class Fruits {
    let name:String
    let capacity:Int

    init(name:String, capacity:Int) {
    self.name = name
    self.capacity = capacity
    }
}


var macFood: Food = Food(name: "macFood")
macFood.fruits
macFood.fruits = [Fruits(name: "Apple", capacity: 1), Fruits(name: "Banana", capacity: 2)]
macFood
macFood.fruits

macFood.fruits += [Fruits(name: "Grape", capacity: 3)]

所有代码都很好,打印得很好,但是最后一行带来了问题。

我认为macFood.fruits是数组。

因为, macFood.fruits = [水果(名称:“苹果”,容量:1),水果(名称:“香蕉”,容量:2)]

所以我认为我可以使用'+ ='运算符添加其他元素。

但是它在最后一行崩溃了, macFood.fruits + = [水果(名称:“葡萄”,容量:3)]

错误消息是

“二进制运算符'+ ='不能应用于类型为[[Fruits]?”的操作数?和“ [水果]” macFood.fruits + = [水果(名称:“葡萄”,容量:3)]”

'期望类型为'(inout R,S)的参数列表' macFood.fruits + = [水果(名称:“葡萄”,容量:3)]”

问题

  1. 崩溃的原因是什么?

  2. macFood.fruits是 Array 吗?

    2-1。如果可以,我可以在数组中添加其他元素吗?

    2-2。如果不是,为什么不使用此数组?

    2-1-1。如果是和是,如何在数组中添加另一个元素?

    2-1-2。如果可以,但是为什么不能在Array中添加元素?

谢谢!

3 个答案:

答案 0 :(得分:1)

  1. 原因是您试图对两个不同类型的对象使用+ =, 一个是水果数组,另一个是可选数组([[Fruits]?表示 是可选的。)

  2. 是的,它是一个数组。

    2.1是

    2.1.1您可以使用yourArray.append(object)

  3. 添加其他元素

答案 1 :(得分:0)

对不起,我忽略了它。

您的问题是'macFood.fruits'是可选的,您不能在可选类型上添加非可选类型。

您设置的水果都是非可选的

<input type="hidden" id="lc_source" value="">
<input type="hidden" id="lc_medium" value="">
<input type="hidden" id="browser" value="">
<input type="hidden" id="fc_campaign" value="">
<input type="hidden" id="fc_channel" value="">
<input type="hidden" id="fc_content" value="">
<input type="hidden" id="fc_landing" value="">
<input type="hidden" id="fc_medium" value="">
<input type="hidden" id="fc_referrer" value="">
<input type="hidden" id="fc_source" value="">               
<input type="hidden" id="fc_term" value="">
<input type="hidden" id="GA_Client_ID" value="">
<input type="hidden" id="ip_address" value="">
<input type="hidden" id="lc_campaign" value="">
<input type="hidden" id=" lc_channel" value="">
<input type="hidden" id="lc_content" value="">
<input type="hidden" id="lc_landing" value="">
<input type="hidden" id="lc_referrer" value="">
<input type="hidden" id="lc_term" value="">
<input type="hidden" id="OS" value="">
<input type="hidden" id="pages_visited_list" value="">
<input type="hidden" id="time_passed" value="">
<input type="hidden" id="time_zone" value="">

或者您使用诸如以下的append方法:

var fruits:[Fruits] = []

答案 2 :(得分:0)

您需要这样声明食物课

class Food {
    let name:String
    var fruits = [Fruits]()

    init(name:String) {
        self.name = name
    }
}

class Fruits {
    let name:String
    let capacity:Int

    init(name:String, capacity:Int) {
        self.name = name
        self.capacity = capacity
    }
}

使用

let macFood: Food = Food(name: "macFood")
macFood.fruits = [Fruits(name: "Apple", capacity: 1), Fruits(name: "Banana", capacity: 2)]
macFood.fruits += [Fruits(name: "Grape", capacity: 3)]