【问题标题】: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 的人们知道这有点奇怪,并且将来可能会改变它。但就目前而言,这就是语法,这就是要了解的全部内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-17
        • 1970-01-01
        • 2014-07-06
        • 1970-01-01
        • 2013-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多