类型 '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
您是说:任何 SignalType
的 Error
符合 至 MyError
的扩展。但这是不可能的。您需要的是:
extension SignalType where Error == MyError
内容为:任何 SignalType
的扩展名 Error
是 MyError
.
我尝试将 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
您是说:任何 SignalType
的 Error
符合 至 MyError
的扩展。但这是不可能的。您需要的是:
extension SignalType where Error == MyError
内容为:任何 SignalType
的扩展名 Error
是 MyError
.