嵌套泛型约束:限制泛型序列扩展中的泛型项T,该扩展受限于该泛型类型。

5

在Swift中,我们可以对诸如序列等泛型项编写扩展:

extension Sequence where Iterator.Element : ObservableType {

}

这将确保扩展仅适用于(RxSwift)可观察序列的序列。

然而,如果元素约束是另一个泛型,那么你可以限制该泛型吗?例如:

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

 }

在上述伪代码(不起作用)中,意图是说:
此扩展应适用于 Observable 序列,其中 Observable 是 MyType 类型的 Observable,例如 [Observable]。
1个回答

2
您可以将 Iterator.Element 限制为符合 ObservableType 的类型,然后再为 Iterator.Element 的相关类型 E 添加另一个约束条件:
protocol ObservableType {
    associatedtype E
    // ...
}

class MyType { }

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

}

1
这两者并不完全相同,对序列元素有两个约束条件?而不是一个泛型元素的约束条件,该泛型元素应在其中具有某种约束条件?或者你是指第二个部分将是ObservableType.Element.E吗?(去尝试一下) - Cargowire
@Cargowire:上述代码限制了扩展为具有从MyClass继承的关联类型的可观察序列。也许我忽视或误解了某些东西-这与您所需的不同吗?如果是这种情况,它是否不能按预期工作? - Martin R
1
你说得对,我误读了第二个限制条件,把它看成了只有“Iterator.Element”,而不是“Iterator.Element.E”! - Cargowire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接