我可以在where子句中使用或(||)吗?

Cal*_*ter 5 generics types where swift

我正在尝试扩展Array类型,但我只希望函数可用,如果类型是IntFloat.

我知道我可以为一种类型做到这一点:

extension Sequence where Iterator.Element == Int { }
Run Code Online (Sandbox Code Playgroud)

但我能为多种类型做到吗?这就是我想要的东西:

extension Sequence where Iterator.Element == Int || Iterator.Element == Float { }
Run Code Online (Sandbox Code Playgroud)

有可能做到这一点吗?

Str*_*ers 7

这在概念上并没有真正起作用.使用扩展中的where允许您使用Element作为您指定的Type.如果你说它可以是多个类型,你可能根本就没有where说明符.

如果您要为多种类型添加特定功能,我建议您创建一个空协议并添加对所需类型的依从性.例如:

protocol WorksWithExtension { }

extension Int: WorksWithExtension { }
extension Float: WorksWithExtension { }

extension Sequence where Iterator.Element: WorksWithExtension {
    //Do whatever you need to do here
}
Run Code Online (Sandbox Code Playgroud)