Вот очень надуманный пример:
protocol P {
init(a: Int)
}
class B: P {
let a: Int
required init(a: Int) {
self.a = a
}
}
func factory<T: P>(a: Int) -> T {
return T(a: a)
}
let b: B = factory(a: 1)
Позволяя протоколу (P
) указать требуемый инициализатор, я могу написать функцию factory
, которая должна создавать новые объекты.
Инициатива не говорит о том, что вы делаете с Int
, который передается - просто что можно сделать P
конкретные значения из Int.