Добавление требований к протоколу после того, как его начали использовать другие модули или библиотеки. Если протокол уже принят и реализован, добавление обычных (не опциональных) методов или свойств приведет к ошибкам компиляции во всех местах, где протокол используется, пока эти новые требования не будут выполнены.
Опциональные требования позволяют расширять протоколы, не "ломая" существующие реализации. Классы или структры могут реализовывать только часть опциональных методов. Это полезно при работе с делегатами или при добавлении новых функций в уже устоявшийся API.
Пример опционального требования в протоколе на Objective-C (поскольку Swift не поддерживает @optional
без @objc
):
swift
В Swift чистые протоколы (без @objc
) не поддерживают @optional
. Чтобы иметь опциональные требования, протокол должен быть помечен как @objc
. Реализации таких протоколов могут использовать расширения для добавления реализаций опциональных методов по умолчанию, что является более современным подходом в Swift.
Пример опционального поведения через расширения протоколов в Swift:
swift
Добавление требований к протоколу после того, как его начали использовать другие модули или библиотеки. Если протокол уже принят и реализован, добавление обычных (не опциональных) методов или свойств приведет к ошибкам компиляции во всех местах, где протокол используется, пока эти новые требования не будут выполнены.
Опциональные требования позволяют расширять протоколы, не "ломая" существующие реализации. Классы или структры могут реализовывать только часть опциональных методов. Это полезно при работе с делегатами или при добавлении новых функций в уже устоявшийся API.
Пример опционального требования в протоколе на Objective-C (поскольку Swift не поддерживает @optional
без @objc
):
swift
В Swift чистые протоколы (без @objc
) не поддерживают @optional
. Чтобы иметь опциональные требования, протокол должен быть помечен как @objc
. Реализации таких протоколов могут использовать расширения для добавления реализаций опциональных методов по умолчанию, что является более современным подходом в Swift.
Пример опционального поведения через расширения протоколов в Swift:
swift
Register or sign in to get access to full answers for all questions from the question bank.