2017-02-27 116 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 
} 
相關問題