Kotlin Multiplatform / Экстеншены в Kotlin и Swift: сходства и различия

Экстеншены в Kotlin и Swift: сходства и различия

В нашей виртуальной библиотеке есть подробная статья об экстеншенах в Kotlin и Swift. Там мы с примерами и подробностями рассказываем, чем одно отличается от другого, и делимся методами решения задач в том и другом случае.

Этот пост — ее краткая версия.

Экстеншены в Kotlin и Swift отличаются синтаксисом. Но суть экстеншенов для любого языка одинакова: расширение функционала класса. Приведем примеры возможностей, доступных одному и другому языкам через экстеншены и востребованных на практике.

Kotlin не модифицирует класс, а добавляет статическую функцию. Swift же непосредственно модифицирует класс. В Kotlin можно создать экстеншен для опционального типа, а в Swift… казалось бы, нельзя, но на самом деле можно (подробнее читайте в статье)! В Kotlin доступно создание экстеншенов для дженерик-типа, в Swift для этого понадобится костыль через NSObject. Kotlin позволяет создать экстеншен для класса внутри другого класса, с доступом к полям обоих классов. В Swift создать экстеншен внутри класса нельзя. У Kotlin нет доступа к приватным полям класса, а у Swift — есть. В Kotlin через экстеншены нельзя задать новый конструктор, а в Swift — можно. Если вам нужно реализовать интерфейс через экстеншен, то это тоже не к Kotlin, а к Swift. Еще одна возможность экстеншенов, в которой Swift выигрывает: переопределение функции расширения родительского класса. Kotlin в этом не поможет.

Но и общее между ними есть: и в Kotlin, и в Swift можно добавить свойство как экстеншен.

Надеемся, что эта справка была вам полезна. За подробностями и примерами кода переходите на полную версию статьи по ссылке.

extension-compare.png