【问题标题】:Binary operator '+=' cannot be applied to operands of type.二元运算符 '+=' 不能应用于类型的操作数。
【发布时间】:2018-09-06 12:00:58
【问题描述】:

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

这是代码

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 是数组。

因为,ma​​cFood.fruits = [Fruits(name: "Apple", capacity: 1), Fruits(name: "Banana", capacity: 2)] 有效。

所以我想我可以使用“+=”运算符添加其他元素。

但它在最后一行崩溃了,ma​​cFood.fruits += [Fruits(name: "Grape", capacity: 3)]

错误信息是

'二元运算符'+='不能应用于'[Fruits]?'类型的操作数和“[水果]” macFood.fruits += [Fruits(name: "Grape", capacity: 3)]'

'需要一个类型为 '(inout R, S)' 的参数列表 macFood.fruits += [Fruits(name: "Grape", capacity: 3)]'

问题

  1. 崩溃的原因是什么?

  2. macFood.fruits 是 数组 吗?

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

    2-2。如果不是,为什么不是这个 Array?

    2-1-1。如果是和是,我怎样才能在 Array 中添加其他元素?

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

谢谢!

【问题讨论】:

  • 你需要初始化你的fruits数组var fruits: [Fruits] = []
  • 您正在尝试将元素附加到 nil 而不是附加到空数组
  • 阅读错误信息。 [Fruits]?[Fruits] 是不同的类型。阅读可选选项。

标签: swift xcode


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

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

    2.1 是的

    2.1.1 可以使用yourArray.append(object)添加其他元素

【讨论】:

  • 谢谢!我还有一个问题! 'expected an argument list of type (inout R, S)',尤其是类型 (inout R,S) 是什么意思?
  • @Hoo 如果答案符合您的问题,您可以将其勾选为正确的吗?根据您的附加问题,您能否提供更多信息?这是哪里来的?
  • macFood.fruits! += [Fruits(name: "Grape", capacity: 3)] 成功了!但是当我删除!再次,预期类型为 '(inout R, S)' macFood.fruits += [Fruits(name: "Grape", capacity: 3)] 的参数列表会再次显示。
【解决方案2】:

对不起,我忽略了。

您的问题是“macFood.fruits”是可选的,您不能将非可选类型添加到可选类型中。

要么你把水果设置成非可选的,比如

var fruits:[Fruits] = []

或者你使用 append 方法,比如:

    if macFood.fruits?.append(Fruits(name: "Grape", capacity: 3)) == nil {
    myArray = [Fruits(name: "Grape", capacity: 3)] 
}

【讨论】:

  • 谢谢!我还有一个问题! 'expected an argument list of type (inout R, S)',尤其是类型 (inout R,S) 是什么意思?
【解决方案3】:

你需要像这样声明 Food 类

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2019-02-13
    • 2019-08-23
    • 2016-09-20
    相关资源
    最近更新 更多