Кроме того, есть ли разница для этих трех вещей между языками Swift и Objective-C?
В чем разница между протоколом, расширением и категорией в разработке IOS? И как их использовать надлежащим образом?
Ответ 1
протоколы
Протокол объявляет программный интерфейс, который может реализовать любой класс.
Протокол определяет план методов, свойств и других требований, которые удовлетворяют конкретной задаче или части функциональности. Протоколы похожи на интерфейсы, которые предоставляют некоторые методы, которые должен реализовать соответствующий класс.
Область применения:
- Обычный вариант использования - это возможность изменить поведение определенных классов без необходимости их подкласса.
- Например:
UITableViewDelegate
,UITableViewDataSource
Также см. Протокол
расширение
Расширения добавляют новые функциональные возможности к существующему классу, структуре, перечислению или типу протокола. Это включает в себя возможность расширять типы, для которых у вас нет доступа к исходному исходному коду (известный как ретроактивное моделирование).
Расширения аналогичны категориям в Objective-C. (В отличие от категорий Objective C, расширения Swift не имеют имен.)
Область применения:
-
Категории - это способ модуляции класса путем распространения его реализации на множество файлов. Расширения предоставляют аналогичную функциональность.
-
Одним из наиболее распространенных применений категорий является добавление методов во встроенные типы данных, такие как
NSString
илиNSArray
. Преимущество этого в том, что вам не нужно обновлять существующий код, чтобы использовать новый подкласс
Расширения и категории имеют некоторую разницу в Objective-C
Примечание: следующее верно только для Objective-C
Категории позволяют добавлять методы вне основного файла интерфейса. Принимая во внимание, что расширения должны быть реализованы в основном файле интерфейса. Это означает, что мы можем с уверенностью заключить, что вы не можете использовать расширения для расширения классов Builtin или классов, для которых у вас нет исходного кода, там вы должны использовать категории. А чтобы использовать расширения, вам нужен доступ к исходному классу, который вы расширяете.
Ответ 2
Концепция протокола и расширения одинакова в Swift. Расширения аналогичны категориям в Objective-C. (В отличие от категорий Objective-C, у расширений Swift нет имен.