从没有抛出的继承函数抛出异常

Leo*_*ues 4 exception-handling swift

我正在尝试执行以下操作:

protocol X{
    func foo()
}
enum XError{
    case BAR
}
class Y:X{
    func foo(){
        throw XError.BAR
    }
}
Run Code Online (Sandbox Code Playgroud)

我不能在协议中添加一个throws声明,它抱怨说

由于封闭函数未声明为'throws',因此未处理错误.

我怎样才能做到这一点?

Hug*_*ius 12

您需要在抛出的任何函数的签名中显式添加throw.

所以

func foo() throws {
    throw XError.BAR
}
Run Code Online (Sandbox Code Playgroud)

这也适用于协议定义.

protocol X {
    func foo() throws
}
Run Code Online (Sandbox Code Playgroud)

Swift中的错误应该符合Error协议.

enum XError: Error {
    case BAR
}
Run Code Online (Sandbox Code Playgroud)