【问题标题】:In Swift: the example below why must I place (let one) next to .Success for the code to work?在 Swift 中:下面的示例为什么我必须在 .Success 旁边放置(让一个)才能使代码正常工作?
【发布时间】:2014-12-09 14:41:59
【问题描述】:
在下面的示例中,为什么我必须将 (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)
}
【问题讨论】:
标签:
string
swift
enums
switch-statement
case
【解决方案1】:
这称为值绑定。 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)
}
【解决方案2】:
我正在尝试理解语法
没有什么好理解的。这只是 是 从枚举案例中提取关联值的语法。就像你玩 Calvinball 时的面具一样——没有人可以质疑它们。
现在,您可能会反对这种语法有点笨拙和烦人。您必须通过 switch 语句的繁琐才能提取相关值?!?这是一个完全有效的抱怨,自从 Swift 于 2014 年 6 月推出以来,人们一直在制造它,而 Apple 的人们知道这有点奇怪,并且将来可能会改变它。但就目前而言,这就是语法,这就是要了解的全部内容。