在Swift中:下面的例子为什么我必须放置(让一个).Success旁边的代码才能工作?

时间:2014-12-09 14:42:00

标签: string swift enums switch-statement case

在下面的示例中,为什么我必须在(let one)旁边放置.Success才能使代码生效?为什么不是(let = one)或仅(one)?我想了解语法。

enum Status {
    case Success(String)
    case Failure(String)
}
let downloadStatus = Status.Failure("Network connection unavailable")

switch downloadStatus {
case .Success(let one):
    println(one)
case .Failure(let two):
    println(two)
}

2 个答案:

答案 0 :(得分:0)

这称为值绑定enum值中包含的值临时绑定到case中的变量。如果使用let,则值将绑定到常量,如果使用var,则它将绑定到变量。

let downloadStatus = Status.Failure("Network connection unavailable")

switch downloadStatus {
case .Success(let one):
    println(one)
case .Failure(var two):
    two += "!!!"  // two is a var, so I can modify it
    println(two)
}

答案 1 :(得分:0)

  

我正在尝试理解语法

没有什么可以理解的。只需 是从枚举案例中提取相关值的语法。当你玩Calvinball时,它就像面具一样 - 没有人被允许质疑它们。

现在,你可能会反对这种语法有点笨拙和讨厌。你必须通过switch语句的rigmarole来拉出相关的值?!?这是一个非常有效的抱怨,自从斯威夫特于2014年6月揭幕以来,人们一直在制作它,而且苹果公司的人都知道它有点奇怪,可能会在未来改变它。但就目前而言,这就是语法,而且所有这一切都需要了解它。