Попытка добавить пищевой объект в массив, приводящий к сбою Неожиданно обнаруженный ноль при развертывании необязательного значения - PullRequest
0 голосов
/ 15 апреля 2019

Я довольно новичок в Swift и MVC.Я получаю html и анализирую его, чтобы создать список продуктов в сезон, который работает правильно.Затем я пытаюсь создать объекты пищи для каждого продукта и добавить их в список продуктов.Я могу создать объект питания, но когда я пытаюсь добавить его в список продуктов, я получаю сообщение об ошибке: Поток 1: Неустранимая ошибка: Неожиданно обнаружен ноль при развертывании Необязательное значение

Вот моя модель:

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 я получаю текущий месяц и из этого определяю текущий сезон и следующий сезон.Я размещаю 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)

Я читал об ошибке и в основном понимаю, что онаожидает некоторого значения, но там ничего нет, отсюда и ноль, который я также вижу в отладчике.Хотя, возможно, мне нужно было инициализировать объект с помощью функции init (), но это просто вызывает ошибки при компиляции

Я не могу понять, почему эта функция добавления вызывает эту проблему.Кто-нибудь может указать, где я иду не так?

1 Ответ

2 голосов
/ 15 апреля 2019

Это

var myFoodList: FoodList!

равно nil, если вы не инициализируете его. Итак, сначала вам нужно

var myFoodList = FoodList()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...