我想扩展一个RXSwift协议,即OsbervableConvertibleType,但我只想在OsbervableConvertibleTypes上创建一个扩展方法,其中包含一个Result对象。现在,结果再次通用。但我想在我的扩展函数中保留泛型类型,因此我的函数的返回类型也是通用的。像这样:
extension ObservableConvertibleType where E: Result<T> {
public func asResultDriver() -> RxCocoa.SharedSequence<RxCocoa.DriverSharingStrategy, Result<T>> {
return self.asObservable()
.filter { $0.isSuccess }
.map { $0.value! }
.asDriver { _ in Driver.empty() }
}
}
可以在Swift 3中使用吗?
谢谢!
答案 0 :(得分:2)
您想要做的是,但是您需要引入一个中间协议,因为Swift 3不支持泛型类型的扩展。
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 { $0.isSuccess }
.map { $0.value! }
.asDriver { _ in Driver.empty() }
}
}
如果你想阅读更多内容,谷歌周围有很多关于这种技术的文章。真正帮助我理解它的那个是this one。