enum Suit {} enum Rank: Int {} // In the example, let's say the Card is CustomStringConvertible so I can leverage all the external code // that prints stuff, and depends on using the var description struct Card : CustomStringConvertible { var rank: Rank var suit: Suit var description : String { return rank.simpleDescription() + suit.simpleDescription() } } // Define a protocol for specializing Arrays of Cards protocol _CardType {} extension Card: _CardType {}