如何访问示例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)"
}
答案 0 :(得分:2)
这个例子是如此做作,以至于没有任何帮助。考虑一下这个
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()清晰度
答案 1 :(得分:1)
您可能希望在切换代码块之外声明您的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)."
}
答案 2 :(得分:0)
我认为这只是一个不完整的例子。
您通常会在对外部具有可见效果的案例块中执行某些操作(而不仅仅是将其分配给无法在交换块外部访问的局部变量)。
请注意,您当然可以在案例块本身中访问sunrise
,sunset
,error
和serverResponse
。