在Swift中抛出多个异常

3
一个函数如何抛出多个异常? 例如在Java中,可以像这样实现:
private Int f(Int data, boolean e)
        throws AException, BException,
        CException {...

谢谢


2
你有没有看过Swift参考手册中的“错误处理”章节?在Swift中,只需要使用func f(...) throws这样的语法,你不需要(也不能!)指定具体会抛出哪些错误。 - Martin R
我认为你可以这样指定:func f() throws -> YourExceptionType,但只能抛出一个异常类型,我想知道如何抛出多个异常。 - Viker
不,你不能这样指定。你从哪里得到的这个信息? - Martin R
@user23 那里你所指定的是函数的返回类型,与函数可能抛出的错误类型无关。在Swift中,一个可抛出的函数可以抛出符合Error协议的任何错误类型 - 无法指定可以抛出的特定类型的错误。 - Hamish
这里有一个有趣的讨论,关于为什么Swift不支持能够指定函数可能抛出的错误类型(s)。详见:为什么Swift中的'throws'不是类型安全的? - Hamish
1个回答

4

该语言不支持此功能,很可能是因为该功能被认为是反模式。但是,通过一些巧妙的方法,您可以创建一个接收错误数组的错误情况:

enum MyError: Error {
    case general
    case notFound
    case invalid
    case multiple([MyError])
}

func test() throws {
    throw MyError.multiple([.general, .invalid])
}

3
这很聪明。为什么他们认为这是一种反模式? - ScottyBlades

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接