协议本身并未实现任何功能,但协议可以像其他类型一样当做一个类型来使用。使用场景:
- 作为函数、方法或构造器中的参数类型或返回值类型
- 作为常量、变量或属性的类型
- 作为数组、字典或其他容器中的元素类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| protocol RandomNumberGenerator { func random() -> Double }
class Dice { let sides: Int let generator: RandomNumberGenerator init(sides: Int, generator: RandomNumberGenerator) { self.sides = sides self.generator = generator } func roll() -> Int { return Int(generator.random() * Double(sides)) + 1 } }
var d6 = Dice(sides: 6, generator: LinearCongruentialGenerator()) for _ in 1...5 { print("Random dice roll is \(d6.roll())") }
|