Мы используем файлы cookie для улучшения работы сайта и предоставления вам персонализированного опыта. Правила использования файлов cookie можно найти в нашей политике конфиденциальности
Протокол определяет контракт — набор требований (методов, свойств, инициализаторов), которые должен реализовать тип, соответствующий этому протоколу. Протоколы не имеют реализации большинства своих требований. Экземпляры протокола создать нельзя.
Абстрактный класс в языках, отличных от Swift (например, Java), представляет собой класс, который нельзя инстанцировать напрямую. Он содержит как реализованные методы (или свойства), так и абстрактные методы, которые должны быть реализованы в его подклассах.
В Swift нет концепции абстрактных классов в их традиционном понимании. Функциональность абстрактных классов в Swift достигается комбинацией протоколов и классов.
Используя протокол, можно определить интерфейс, а затем создать обычный класс, соответствующий этому протоколу и предоставляющий реализацию. Частичная реализация протокола может быть предоставлена с помощью расширений (protocol extensions), но это не делает протокол "абстрактным классом" в чистом виде.
Протокол (Swift) | Абстрактный класс (традиционный) | |
---|---|---|
Назначение | Определение контракта (интерфейса) | Определение общего поведения и структуры с возможностью частичной реализации |
Реализация | Как правило, не содержит реализации (кроме расширений) | Может содержать как реализованные, так и абстрактные |
Протокол определяет контракт — набор требований (методов, свойств, инициализаторов), которые должен реализовать тип, соответствующий этому протоколу. Протоколы не имеют реализации большинства своих требований. Экземпляры протокола создать нельзя.
Абстрактный класс в языках, отличных от Swift (например, Java), представляет собой класс, который нельзя инстанцировать напрямую. Он содержит как реализованные методы (или свойства), так и абстрактные методы, которые должны быть реализованы в его подклассах.
В Swift нет концепции абстрактных классов в их традиционном понимании. Функциональность абстрактных классов в Swift достигается комбинацией протоколов и классов.
Используя протокол, можно определить интерфейс, а затем создать обычный класс, соответствующий этому протоколу и предоставляющий реализацию. Частичная реализация протокола может быть предоставлена с помощью расширений (protocol extensions), но это не делает протокол "абстрактным классом" в чистом виде.
Протокол (Swift) | Абстрактный класс (традиционный) | |
---|---|---|
Назначение | Определение контракта (интерфейса) | Определение общего поведения и структуры с возможностью частичной реализации |
Реализация | Как правило, не содержит реализации (кроме расширений) | Может содержать как реализованные, так и абстрактные |
Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.