2017-02-27 76 views
2

我试图扩展Array类型,但我只想要可用的功能,如果类型是IntFloat我可以在where子句中使用一个或(||)吗?

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

extension Sequence where Iterator.Element == Int { } 

但我能做到这一点对多种类型的?这是我想要的东西:

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

是否有可能做到这一点?

回答

2

这在概念上并不真正起作用。使用扩展名中的哪个位置可让您将Element用作您指定的类型。如果你说它可以是多个类型,那么你可能根本就没有那个说明符。

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

protocol WorksWithExtension { } 

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

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