Swift 用绑定捕获枚举大小写

Swift catch enum case with binding

如果我有自定义错误

enum MyError: Error {
  case error1
  case error2
}

我可以捕获该类型的所有错误并绑定一个变量:

do {
} catch let e as MyError {
} catch {
  // everything else
}

或者我可以在不绑定变量的情况下捕获特定错误

do {
} catch MyError.error1 {
} catch {
  // everything else, including MyError.error2
}

但是我如何捕获特定错误绑定变量?

我想你需要的是:

    do {
        throw(MyError.error2)
    } catch let error as MyError {
        switch error {
        case .error1:
            print("error 1 happened")
            return
        case .error2:
            print("error 2 happened")
            return
        }
    } catch let error {
        print(error)
        return
    }

如果我没理解错的话,您希望 catch 中的变量是特定类型错误的特定错误情况。

如果是这样,你可以这样做:

do {
    try something()
} catch let err1 as MyError where err1 == .error1 {
    print(err1)
} catch {
    print(error)
}