将协议扩展限制为单个枚举案例

时间:2015-11-06 14:35:04

标签: swift enums

我试图仅将if($fil !~ m/^\.+/i) { your stuff here } 限制为extensionprotocol caseenum

例如,这会编译:

extension FooProtocol where T == SomeEnum {}

但这并不是:

extension FooProtocol where T == SomeEnum.CaseOne {}

我知道这是不可能的,因为case中的enum不能单独表示为type

有解决方法吗?

编辑:

我的情况如下:

extension SignalProducerType where E == AppError.NonError {
  func ignoreError() -> SignalProducer<T, NoError> {}
}

我希望仅将ignoreError方法公开给那些ErrorTypeAppError.NonError(自定义类型)的方法

1 个答案:

答案 0 :(得分:2)

这取决于你想要实现的目标,但简而言之并非如此。类型检查器(和协议一致性检查)在编译时发生,枚举的情况通常只在运行时知道。

您可以在协议扩展中定义方法以对整个枚举进行操作,但对其他情况返回nil(或不执行任何操作)。