在下面的示例中,为什么我必须将(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)
}
这称为值绑定。 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)
}
我正在尝试理解语法
没有什么可理解的。这只是从枚举案例中提取关联值的语法。这就像你玩加尔文球时的面具——没有人被允许质疑它们。
现在,您可能会反对这种语法有点笨拙和烦人。您必须经历 switch 语句的严格操作才能提取出关联的值?!?这是一个完全合理的抱怨,自从 Swift 于 2014 年 6 月推出以来,人们一直在这样做,苹果公司的人知道这有点奇怪,将来可能会改变它。但就目前而言,这就是语法,这就是所有需要了解的。