Designated Инициализатор: Главный, "основной" инициализатор в классе. Он должен полностью инициализировать все собственные хранимые свойства класса, а затем вызывать вверх по иерархии designated инициализатор родительского класса (через super.init). Каждый класс должен иметь хотя бы один designated инициализатор.
Convenience Инициализатор: Вспомогательный инициализатор, призванный упростить создание экземпляров класса в определенных сценариях. Он обязательно должен вызывать другой инициализатор из того же класса – либо designated, либо другой convenience. ultimately, цепочка вызовов convenience инициализаторов должна привести к вызову designated инициализатора в том же классе. Convenience инициализаторы необязательны.
Вот схема делегирования инициализации:
plaintext
Пример:
swift
Ключевое отличие заключается в их роли в цепочке инициализации и правилах делегирования: designated гарантирует полную инициализацию своих свойств и делегирует инициализацию родителя, тогда как convenience упрощает создание экземпляров, делегируя другому инициализатору в том же классе, в конечном итоге приводя к вызову designated инициализатора.