尝试将食物对象添加到数组中导致崩溃当解开一个可选值时意外地发现nil

时间:2019-04-14 22:14:04

标签: swift xcode model-view-controller

我对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()函数初始化对象,但这只会导致编译错误

我不知道为什么这个添加功能会导致这个问题。谁能指出我要去哪里错了?

1 个答案:

答案 0 :(得分:2)

var myFoodList: FoodList!
如果不初始化,则

nil。所以首先你需要

var myFoodList = FoodList()