Swift - 有没有办法匹配错误而不抛出?

Tom*_*ina 2 swift

在某些情况下,错误作为参数提供而不是抛出。一个示例可以是所Result<T, Error>提供的完成处理程序。我想匹配错误而不抛出它。

通过抛出错误匹配的示例:

enum MyError: Error {
    case error
}

func process(error: Error) {
    do {
        throw error
    } catch MyError.error {
        print("this is it")
    } catch {
        print("unknown error")
    }
}

process(error: MyError.error)
Run Code Online (Sandbox Code Playgroud)

更新:

即使对于系统提供的错误(例如URLError不是enum类型的错误),匹配也应该有效。

func process(error: Error) {
    do {
        throw error
    } catch URLError.timedOut {
        print("this is not it")
    } catch URLError.cancelled {
        print("this is it")
    } catch {
        print("unknown error")
    }
}

process(error: URLError(.cancelled))
Run Code Online (Sandbox Code Playgroud)

Mar*_*rco 5

您可以使用if case语法。

在你的例子中,

enum MyError: Error {
    case error
}

func process(error: Error) {
    if case MyError.error = error {
        print("this is it")
    } else {
        print("unknown error")
    }
}

process(error: MyError.error)
Run Code Online (Sandbox Code Playgroud)