Понимание поведения перечисления (Введение в разработку приложений с помощью Swift - Урок 19)

Я новичок в программировании и собираюсь закончить iBook "Введение в разработку приложений с помощью Swift". В настоящее время я участвую в уроке 19 "Перечисления и переключатели", и на странице 8 соответствующей игровой площадки он показывает следующий код:

enum LunchChoice {
    case pasta, burger, soup
}

func cookLunch(_ choice: LunchChoice) -> String {
    if choice == .pasta {
        return ""
    } else if choice == .burger {
        return ""
    } else if choice == .soup {
        return ""
    }

    return "Erm... how did we get here?"
}

cookLunch(.soup)

По сути, это не проблема для меня, чтобы понять, но, как только я позвоню cookLunch(.soup)последнее возвращаемое утверждение не отображается. Упражнение чуть ниже спроси меня:

попытайтесь изменить значение, переданное в cookLunch, чтобы вызывался последний оператор else

И это то, где я застрял, потому что кажется невозможным передать что-то отличное от функции cookLunch, кроме выбора, присутствующего в перечислении.

Не могли бы вы помочь мне понять смысл всего этого и, возможно, дать мне решение?

2 ответа

Решение

В ваших инструкциях написано "чтобы назывался последний оператор else". Это будет возвращение супа, а не возвращение "как мы сюда попали". Как вы говорите, с 3 вариантами обеда и 3 операторами if/else всегда будет вызываться одно из них. Вы должны добавить 4-й выбор обеда, который не имеет соответствующего if или else if для выполнения кода "как мы сюда попали".

У вас есть два варианта:

  • Закомментируйте третье сравнение

    // } else if choice == .soup {
    //      return ""
    
  • Добавьте четвертый случай, который не охватывается сравнениями

    enum LunchChoice {
        case pasta, burger, soup, steak
    }
    

    и передать его:

    cookLunch(.steak)
    

Однако никто бы не стал серьезно писать такой if - else цепь, в Свифте switch выражение уместно

func cookLunch(_ choice: LunchChoice) -> String {
    switch choice {
    case .pasta:  return ""
    case .burger:  return ""
    case .soup: return ""

    default: return "Erm... how did we get here?"
    }
}
Другие вопросы по тегам