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

时间:2017-02-27 17:57:41

标签: swift generics types where

我正在尝试扩展Array类型,但如果类型为IntFloat,我只想要可用的函数。

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

extension Sequence where Iterator.Element == Int { }

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

extension Sequence where Iterator.Element == Int || Iterator.Element == Float { }

有可能实现这个目标吗?

1 个答案:

答案 0 :(得分:6)

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

如果您正在寻找为多种类型添加特定功能,我建议您创建一个空协议并添加对所需类型的依从性。 e.g:

protocol WorksWithExtension { }

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

extension Sequence where Iterator.Element: WorksWithExtension {
    //Do whatever you need to do here
}