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

Car*_*ire 5 generics swift

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

extension Sequence where Iterator.Element : ObservableType {

}
Run Code Online (Sandbox Code Playgroud)

这将保证扩展仅适用于(在这种情况下)RxSwift可观察量的序列.

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

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

 }
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*n R 2

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

protocol ObservableType {
    associatedtype E
    // ...
}

class MyType { }

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

}
Run Code Online (Sandbox Code Playgroud)