Swift 3 扩展限制为类型

Swift 3 extension constrained to a type

我想扩展一个 RXSwift 协议,即 OsbervableConvertibleType,但我只想在 OsbervableConvertibleTypes 上创建一个扩展方法,其中有一个 Result 对象。现在,Result 又是通用的了。但是我想在我的扩展函数中保留通用类型,所以我的函数的 return 类型也是通用的。像这样:

extension ObservableConvertibleType where E: Result<T> {
    public func asResultDriver() -> RxCocoa.SharedSequence<RxCocoa.DriverSharingStrategy, Result<T>> {
        return self.asObservable()
            .filter { [=11=].isSuccess }
            .map { [=11=].value! }
            .asDriver { _ in Driver.empty() }
    }
}

Swift3 可以吗?

谢谢!

你想做的是可以的,但是你需要引入一个中间协议,因为Swift3不支持泛型扩展。

protocol ResultType {
  associatedtype Value

  var isSuccess: { Bool }
  var value: Value?
}

extension Result: ResultType { }

这为您提供了一个基本协议 ResultType,您可以在 ObservableConvertibleType 扩展

中使用它
extension ObservableConvertibleType where E: ResultType {
    public func asResultDriver() -> RxCocoa.SharedSequence<RxCocoa.DriverSharingStrategy, Result<E.Value>> {
        return self.asObservable()
            .filter { [=11=].isSuccess }
            .map { [=11=].value! }
            .asDriver { _ in Driver.empty() }
    }
}

如果您想阅读更多内容,google 周围有很多关于此技术的文章。真正帮助我理解它的是 this one.