如何访问案例的交换机结果



如何访问示例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)"
}

这个例子太做作了,一点帮助都没有。考虑这个

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)
}

要点是,例子中的'success'变量实际上应该是某个函数/子系统调用的一个赋值。我将它包装在一个循环中,用于println()清晰度

您可能希望在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)."
}

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

你通常会在case块中做一些对外部有可见影响的事情(而不仅仅是将它赋值给一个不能在switch块外部访问的局部变量)。

请注意,您当然可以在案例块中访问sunrise, sunset, errorserverResponse

最新更新