天天看点

Swift 中的错误处理

Swift 错误处理

  • 在 Swift 中使用遵守 Error 协议的类型来表示错误,这是一个来自系统的空协议,凡是遵守该协议的类型都可以用于错误处理 Swift

    中枚举类型最适合构建一组相关的错误状态

enum FailError : Error {
    case ErrorOne
    case ErrorTwo
    case ErrorThree
    case ErrorFour
}           

用 throwing 函数传递错误

  • 抛出错误使用关键字 throw
  • 可能会抛出错误的函数和方法必须在定义时声明,方法是在返回箭头->前添加 throws 关键字,一个标有 throws 关键字的函数被称为 throwing 函数
func TestError(_ num : Int) throws -> String {

    switch num {
        case 1:
            throw FailError.ErrorOne
        case 2:
            throw FailError.ErrorTwo
        case 3:
            throw FailError.ErrorThree
        case 4:
            throw FailError.ErrorFour
        default:
            return "成功"
    }
}           

使用do-catch 处理错误

  • 可以使用一个 do-catch 语句运行一段闭包代码来处理错误,如果在 do 子句中代码抛出异常,这个错误会在 catch 子句中匹配

    从而决定哪条子句能够处理它

do {
    try TestError(4)
} catch FailError.ErrorOne {
    print("ErrorOne")
} catch FailError.ErrorTwo {
    print("ErrorTwo")
} catch FailError.ErrorThree {
    print("ErrorThree")
} catch FailError.ErrorFour {
    print("ErrorFour")
}           

将错误转化为可选值

  • 可以使用 try? 将错误转换成一个可选值来处理错误。如果 try?表达式执行时一个错误被抛出,那么表达式的值为 nil
try? TestError(4)
print(try? TestError(5))

if let val = try? TestError(4) {
    print("---成功")
} else{
    print("---失败")
}           

禁用错误传递

  • 虽然在程序中使用了 throw 关键字,但是我们可以确保不会抛出任何异常,这是我们就可以表达式前添加 try! 用来强制禁止错误传递
try! TestError(5)
print(try! TestError(5))