Swift 3 扩展限制为一个类型
Posted
技术标签:
【中文标题】Swift 3 扩展限制为一个类型【英文标题】:Swift 3 extension constrained to a type 【发布时间】:2017-02-28 11:36:22 【问题描述】:我想扩展一个 RXSwift 协议,即 OsbervableConvertibleType,但我只想在 OsbervableConvertibleTypes 上创建一个扩展方法,其中包含一个 Result 对象。现在, 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 中有可能吗?
谢谢!
【问题讨论】:
【参考方案1】:你想做的事情是可能的,但你需要引入一个中间协议,因为 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()
如果您想了解更多信息,Google 上有很多关于这种技术的文章。真正帮助我理解它的是this one。
【讨论】:
这正是我想要的。谢谢! :)以上是关于Swift 3 扩展限制为一个类型的主要内容,如果未能解决你的问题,请参考以下文章