Swift协议作为类型

协议本身并未实现任何功能,但协议可以像其他类型一样当做一个类型来使用。使用场景:

  • 作为函数、方法或构造器中的参数类型或返回值类型
  • 作为常量、变量或属性的类型
  • 作为数组、字典或其他容器中的元素类型
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())")
}