Zac*_*Zac 2 syntax error-handling enums swift
我正在尝试在Swift中创建一个简单的错误处理结构.我想要做的是返回一个包含"成功"代码或"错误"代码的类型.但是为了使它有点棘手,在错误的情况下,我还想得到一条消息和一个诊断字符串.
我想出了这个,编译得很好,就返回成功/错误而言效果很好:
enum PasswordValidationResult {
case Success
case PasswordError(message: String, diagnostic: String)
func isValid() -> Bool {
switch self {
case .Success:
return true
case .PasswordError:
return false
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以返回所需的值:
return PasswordValidationResult.PasswordError(message: "You can't do that", diagnostic: "XYZ")
Run Code Online (Sandbox Code Playgroud)
当我尝试引用返回值时出现问题.
显然,我可以使用isValid()函数来测试成功条件,但是我找不到任何引用消息和诊断字符串的语法.
例如,试试这个:
myError = someFunction()
if myError == PasswordValidationResult.Error {
// None of this will compile, at all...
println(myError.message)
}
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方法提取枚举的关联值switch
:
switch someFunction() {
case .Success:
println("It worked!")
case .PasswordError(let message, let diag):
println(message)
}
Run Code Online (Sandbox Code Playgroud)
除了其他好处之外switch
,如果你的情况耗尽所有可能性(就像这里 - 枚举必须是两个值中的一个),你不需要默认值.如果你忘记并错过了一个,编译器会警告你.
注意,您还可以匹配特定值:
switch someFunction() {
case .Success:
println("It worked!")
case .PasswordError("Password invalid", _):
println("Please try again")
case let .PasswordError(message, diag):
// more general error handling
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1434 次 |
最近记录: |