Swift捕获和切换模式用于显式错误处理

例子

class Plane {
    
    enum Emergency: ErrorType {
        case NoFuel
        case EngineFailure(reason: String)
        case DamagedWing
    }

    var fuelInKilograms: Int

    //...未显示init和其他方法

    func fly() throws {
        // ...
        if fuelInKilograms <= 0 {
            // 呃哦
            throw Emergency.NoFuel
        }
    }

}

在客户端类中:

let airforceOne = Plane()
do {
    try airforceOne.fly()
} catch let emergency asPlane.Emergency{
    switch emergency {
    case .NoFuel:
        // 致电最近的机场紧急降落
    case .EngineFailure(let reason):
        print(reason) // 让机械师知道原因
    case .DamagedWing:
        // 评估损失并确定总统是否可以做到
    }
}