Отличия категории и расширения (extention, неименованная категория). Пример

Механизм, позволяющий расширять уже существующие классы (не используя никаких других технологий типа наследования или композиции. расширить функционал класса, доступа к исходному коду которого у вас нет, вы не можете наследоваться от него и тд. путем добавления новых методов, новые instance-переменные добавить таким образом нельзя), называется категорией. Категория имеет свое имя, список методов и имя класса, который она расширяет. Описание категории имеет следующий вид:

#import "ClassName.h"

@interface ClassName (CategoryName)

объявление методов: @end

Реализация категории выглядит следующим образом:

#import "CategoryName.h"

@implementation ClassName (CategoryName)

реализация методов: @end

Ограничения при создании категорий: • Невозможность добавления переменных • Возможная коллизия имен с самим классом, поэтому необходимо использовать оригинальные префиксы в наименовании своих методов

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

Расширения в Swift могут: • Добавлять вычисляемые свойства и вычисляемые свойства типа • Определять методы экземпляра и методы типа • Предоставлять новые инициализаторы • Определять сабскрипты (индексы) • Определять новые вложенные типы • Обеспечить соответствие существующего типа протоколу

Расширения могут добавлять новую функциональность типу, но они не могут переписать существующую функциональность

extension SomeType { // описываем новую функциональность для типа SomeType }

(в objective c) разновидностью категорий являются расширения. Они являются категориями с тем отличием, что интерфейс расширения описывается в имплементации основного класса до @implementation, а реализация прописывается в основном теле имплементации класса и не пишется название категории. В отличии от категорий, расширения используются для собственных классов, для сокрытия части реализации.

Основное назначение категория переопределение публичных readonly пропертей в приватные readwrite.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: