【发布时间】: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 是数组。
因为,macFood.fruits = [Fruits(name: "Apple", capacity: 1), Fruits(name: "Banana", capacity: 2)] 有效。
所以我想我可以使用“+=”运算符添加其他元素。
但它在最后一行崩溃了,macFood.fruits += [Fruits(name: "Grape", capacity: 3)]
错误信息是
'二元运算符'+='不能应用于'[Fruits]?'类型的操作数和“[水果]” macFood.fruits += [Fruits(name: "Grape", capacity: 3)]'
'需要一个类型为 '(inout R, S)' 的参数列表 macFood.fruits += [Fruits(name: "Grape", capacity: 3)]'
问题
崩溃的原因是什么?
-
macFood.fruits 是 数组 吗?
2-1。如果是,我可以在 Array 中添加其他元素吗?
2-2。如果不是,为什么不是这个 Array?
2-1-1。如果是和是,我怎样才能在 Array 中添加其他元素?
2-1-2。如果是但不是,为什么我不能在Array中添加元素?
谢谢!
【问题讨论】:
-
你需要初始化你的fruits数组
var fruits: [Fruits] = [] -
您正在尝试将元素附加到 nil 而不是附加到空数组
-
阅读错误信息。
[Fruits]?和[Fruits]是不同的类型。阅读可选选项。