我对Swift和MVC还是比较陌生。我正在获取html并进行解析,以创建季节中的食物列表,这可以正常工作。 然后,我尝试创建每种食物的食物对象并将其添加到食物列表中。我可以创建食物对象,但是当我尝试将它们添加到食物列表时,我得到了错误:线程1:致命错误:在展开一个可选值时意外发现nil
这是我的模特:
import Foundation
class food {
var foodImageName: String = ""
var foodName: String = ""
init(fn: String) {
foodName = fn
foodImageName = "FreshFruitAndVeg.jpg"
}
}
class foodList {
var listOfFoods:[food]
init() {
listOfFoods = []
}
func add(foodType:food) {
self.listOfFoods.append(foodType)
print("Food added!")
}
func delete(rowNum: Int) {
self.listOfFoods.remove(at: rowNum)
}
}
在我的FoodsViewController中,我获取当前月份并从中确定currentSeason和nextSeason。我将html标签排列成一个包含大量无关信息的数组,因此我找到了currentSeason和nextSeason元素的索引。获得这些信息后,我将使用这些索引运行一个for循环以创建食物对象并将其添加到myFoodList。我可以看到正在创建食物对象,并且可以打印出内容,但是当我尝试将其添加到myFoodList时,会出现上述错误。
我像这样在FoodsViewController中创建变量:
var currentSeason = ""
var nextSeason = ""
var currentSeasonIndex = 0
var nextSeasonIndex = 0
var endIndex = 0
var myFoodList: foodList!
这是我创建食物对象并将其添加到foodList的代码片段 :
do {
for i in currentSeasonIndex+1..<nextSeasonIndex {
let text = try nextElements[i].text()
print("This season's foods: ", text)
let newFood = food.init(fn: text)
print ("New food to be added: ", newFood.foodName)
myFoodList.add(foodType: newFood)
for item in 0..<myFoodList.listOfFoods.count {
print("My food List: ", myFoodList.listOfFoods[item])
}
}
}
catch {
}
我可以在调试器中看到食物对象在那里,但是myFoodList总是为零,导致该行崩溃。
myFoodList.add(foodType: newFood)
我一直在阅读有关该错误的信息,并且基本上理解该错误是期望某个值的,但是那里什么也没有,因此在调试器中也可以看到nil。 我虽然也许需要用init()函数初始化对象,但这只会导致编译错误
我不知道为什么这个添加功能会导致这个问题。谁能指出我要去哪里错了?
答案 0 :(得分:2)
此
var myFoodList: FoodList!
如果不初始化,则为nil
。所以首先你需要
var myFoodList = FoodList()