枚举行为理解(使用Swift开发应用程序开发 - 第19课)

时间:2017-09-10 12:12:55

标签: swift enumeration

我是编码的新手,即将完成“使用Swift进行App开发简介”iBook。我目前在第19课,Enumerations和Switch,以及相关游乐场的第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),最后一个return语句就不会显示出来。 下面的练习问我:

  

尝试更改传入cookLunch的值,以便调用最后的else语句

这就是我被卡住的地方,因为除了枚举中的选择之外,似乎不可能将不同的东西传递给cookLunch函数。

你能帮助我理解这一切背后的意义,并为我提供解决方案吗?

2 个答案:

答案 0 :(得分:2)

您有两种选择:

  • 评论第三次比较

    // } else if choice == .soup {
    //      return ""
    
  • 添加比较未涵盖的第四个案例

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

    并通过它:

    cookLunch(.steak)
    

然而,没有人会认真地写这样的if - else链,在Swift中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?"
    }
}

答案 1 :(得分:1)

您的指示说“以便调用最终的其他声明”。这将是汤回归,而不是“我们如何到达这里”回归。正如你所说,有3个午餐选择和3个if / else语句,其中一个将永远被调用。您必须添加第4个午餐选择,该选择没有相应的if或者否则为了“我们如何到达这里”代码来执行。