在Swift中,我们可以编写通用项目的扩展名,例如sequence:
extension Sequence where Iterator.Element : ObservableType {
}
这将保证扩展仅适用于(在本例中)RxSwift可观察量的序列。
但是,如果元素约束是另一个泛型,那么你可以约束那个泛型吗? e.g:
extension Sequence where Iterator.Element : ObservableType where E : MyType {
}
在上面的伪代码(不起作用)中,意图是:
此扩展应该应用于Observable的序列,其中Observable是MyType类型的Observable,例如[可观察]
答案 0 :(得分:2)
您可以将Iterator.Element
限制为符合的类型
ObservableType
,然后为E
的关联类型Iterator.Element
添加另一个约束:
protocol ObservableType {
associatedtype E
// ...
}
class MyType { }
extension Sequence where Iterator.Element: ObservableType, Iterator.Element.E: MyType {
}