嵌套通用约束:在受限于该泛型类型的通用序列扩展内约束泛型项的T.

时间:2017-01-17 15:14:55

标签: swift generics

在Swift中,我们可以编写通用项目的扩展名,例如sequence:

extension Sequence where Iterator.Element : ObservableType {

}

这将保证扩展仅适用于(在本例中)RxSwift可观察量的序列。

但是,如果元素约束是另一个泛型,那么你可以约束那个泛型吗? e.g:

extension Sequence where Iterator.Element : ObservableType where E : MyType {

 }

在上面的伪代码(不起作用)中,意图是:

此扩展应该应用于Observable的序列,其中Observable是MyType类型的Observable,例如[可观察]

1 个答案:

答案 0 :(得分:2)

您可以将Iterator.Element限制为符合的类型 ObservableType,然后为E的关联类型Iterator.Element添加另一个约束:

protocol ObservableType {
    associatedtype E
    // ...
}

class MyType { }

extension Sequence where Iterator.Element: ObservableType, Iterator.Element.E: MyType {

}