【问题标题】:How to access switch results of a case?如何访问案例的切换结果?
【发布时间】:2014-06-15 02:58:14
【问题描述】:

如何访问示例apple swift book代码的switch语句结果?

我想我可以制作只返回 case 语句的值的函数,但我试图理解这段代码。

enum ServerResponse {
    case Result(String, String)
    case Error(String)
}

let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese.")

switch success {
case let .Result(sunrise, sunset):
    let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
case let .Error(error):
    let serverResponse = "Failure...  \(error)"
}

【问题讨论】:

    标签: swift


    【解决方案1】:

    这个例子太做作了,根本没有用。考虑一下这个

    enum ServerResponse {
        case Result(String, String)
        case Error(String)
    }
    
    for i in 1...100 {
        let mySuccess: ServerResponse = {
            let zeroOrOne = rand() % 2
            if zeroOrOne == 0 {
                return ServerResponse.Result("7:00 am", "8.09 pm")
            } else {
                return ServerResponse.Error("Out of cheese.")
            }
        }()
    
        var serverResponse: String
        switch mySuccess {
        case let .Result(sunrise, sunset):
            serverResponse = "Sunrise is at \(sunrise) and sunset as \(sunset)"
        case let .Error(error):
            serverResponse = "Failure... \(error)"
        }
    
        println(serverResponse)
    }
    

    要点是示例中的“成功”变量实际上应该是某个函数/子系统调用的结果。为了 println() 清晰,我将它包裹在一个循环中

    【讨论】:

    • 很酷,但是为什么要使用内联关闭样式来分配mySuccess 而不是serverResponse
    【解决方案2】:

    您可能希望在 switch 代码块之外声明您的 serverResponse 变量:

    var serverResponse: String
    
    switch success {
    case let .Result(sunrise, sunset):
        serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
    case let .Error(error):
        serverResponse = "Failure... \(error)."
    }
    

    【讨论】:

      【解决方案3】:

      我认为这只是一个不完整的例子。

      您通常会在 case 块中做一些对外部有可见影响的事情(而不仅仅是将其分配给在 switch 块之外无法访问的局部变量)。

      请注意,您当然可以在 case 块本身中访问 sunrisesunseterrorserverResponse

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多