В чем разница между протоколом, расширением и категорией в разработке IOS? И как их использовать надлежащим образом?

Кроме того, есть ли разница для этих трех вещей между языками Swift и Objective-C?

Ответ 1

протоколы

Протокол объявляет программный интерфейс, который может реализовать любой класс.

Протокол определяет план методов, свойств и других требований, которые удовлетворяют конкретной задаче или части функциональности. Протоколы похожи на интерфейсы, которые предоставляют некоторые методы, которые должен реализовать соответствующий класс.

Область применения:

  • Обычный вариант использования - это возможность изменить поведение определенных классов без необходимости их подкласса.
  • Например: UITableViewDelegate, UITableViewDataSource

Также см. Протокол

расширение

Расширения добавляют новые функциональные возможности к существующему классу, структуре, перечислению или типу протокола. Это включает в себя возможность расширять типы, для которых у вас нет доступа к исходному исходному коду (известный как ретроактивное моделирование).

Расширения аналогичны категориям в Objective-C. (В отличие от категорий Objective C, расширения Swift не имеют имен.)

Область применения:

  • Категории - это способ модуляции класса путем распространения его реализации на множество файлов. Расширения предоставляют аналогичную функциональность.

  • Одним из наиболее распространенных применений категорий является добавление методов во встроенные типы данных, такие как NSString или NSArray. Преимущество этого в том, что вам не нужно обновлять существующий код, чтобы использовать новый подкласс


Расширения и категории имеют некоторую разницу в Objective-C

Примечание: следующее верно только для Objective-C

Категории позволяют добавлять методы вне основного файла интерфейса. Принимая во внимание, что расширения должны быть реализованы в основном файле интерфейса. Это означает, что мы можем с уверенностью заключить, что вы не можете использовать расширения для расширения классов Builtin или классов, для которых у вас нет исходного кода, там вы должны использовать категории. А чтобы использовать расширения, вам нужен доступ к исходному классу, который вы расширяете.

Ответ 2

Protocol

Extension

Category

Концепция протокола и расширения одинакова в Swift. Расширения аналогичны категориям в Objective-C. (В отличие от категорий Objective-C, у расширений Swift нет имен.