嵌套泛型约束:在约束为该泛型类型的泛型序列扩展内约束泛型项的 T

  • 本文关键字:泛型 约束 扩展 泛型类型 嵌套 swift generics
  • 更新时间 :
  • 英文 :


在 Swift 中,我们可以在泛型项目上编写扩展,例如 sequence:

extension Sequence where Iterator.Element : ObservableType {
}

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

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

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

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

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

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

protocol ObservableType {
    associatedtype E
    // ...
}
class MyType { }
extension Sequence where Iterator.Element: ObservableType, Iterator.Element.E: MyType {
}

最新更新