类型 'Error' 限制为非协议类型,即使类型是协议

Type 'Error' constrained to non-protocol type even the type is a protocol

我尝试将 SignalType 从 ReactiveCocoa 扩展到自定义 ErrorType,代码如下所示

enum MyError: ErrorType {
    // .. cases
}

extension SignalType where Error: MyError {
    // my exetensions her
}

但我一直收到这样的错误

Type 'Error' constrained to non-protocol type 'MyError'

这真的很奇怪,如果你看看ErrorType定义

public protocol ErrorType {
}

既然它是一个协议,那么为什么编译器抱怨它是一个 non-protocol 类型,知道吗?

你是对的,但是 MyError 不是一个协议,这就是错误所说的。

当您使用此语法时:

extension SignalType where Error: MyError

您是说:任何 SignalTypeError 符合 MyError 的扩展。但这是不可能的。您需要的是:

extension SignalType where Error == MyError

内容为:任何 SignalType 的扩展名 Error MyError.