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.
我想扩展一个 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.