当前位置: 首页 > 知识库问答 >
问题:

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

姜奇
2023-03-14

我在练习一些代码,遇到了一些问题。

这是密码

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

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

所以我想我可以使用'='运算符添加另一个元素。

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

错误消息为

“二进制运算符”=“不能应用于“[结果]?”类型的操作数”还有“[水果]”macFood。水果=[水果(名称:“葡萄”,容量:3)]'

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

问题

>

macFood.fruits数组吗?

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

2-2. 如果不是,为什么这个数组不是?

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

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

谢谢你!

共有3个答案

仲智
2023-03-14

你需要像这样申报食物类别

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)]
汪阳辉
2023-03-14

抱歉,我忽略了。

你的问题是“macFood”。“水果”是可选的,您不能将非可选类型添加到可选类型上。

您可以设置水果非可选,如

var fruits:[Fruits] = []

或者使用append方法,如:

    if macFood.fruits?.append(Fruits(name: "Grape", capacity: 3)) == nil {
    myArray = [Fruits(name: "Grape", capacity: 3)] 
}
齐文栋
2023-03-14

>

是的,它是一个数组。

2.1是

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

 类似资料: