协议类型可以在数组或者字典这样的集合中使用,在 协议类型 提到了这样的用法。下面的例子创建了一个元素类型为 TextRepresentable
的数组:
let things: [TextRepresentable] = [game, d12, simonTheHamster]
如下所示,可以遍历 things
数组,并打印每个元素的文本表示:
for thing in things {
print(thing.textualDescription)
}
// A game of Snakes and Ladders with 25 squares
// A 12-sided dice
// A hamster named Simon
注意 thing
常量是 TextRepresentable
类型而不是 Dice
,DiceGame
,Hamster
等类型,即使实例在幕后确实是这些类型中的一种。由于 thing
是 TextRepresentable
类型,任何 TextRepresentable
的实例都有一个 textualDescription
属性,所以在每次循环中可以安全地访问 thing.textualDescription
。