Вот мое понимание:
Расширения обычно используются для добавления дополнительных функций в наш собственный * пользовательский класс .Мы можем добавить частные методы или свойства, расширяющие интерфейс класса, которые могут использоваться в реализации класса.
Расширения должны быть записаны в том же файле, что и класс.Следовательно, вы не можете писать расширения для предопределенных типов, таких как String, Float и т. Д.
С другой стороны, категории можно использовать для добавления дополнительных методов к уже существующим классам.Например, мы можем создавать свои собственные методы, расширяя класс String.Обратите внимание, что мы не можем создать дополнительные свойства в категориях.Также основным преимуществом категорий является то, что мы можем записывать категории в любом другом файле, вне файла, в котором находится ваш класс.
Также при создании категорий вы должны дать ему имя в квадратных скобках.Но для расширения имя не требуется.Следовательно, иногда их также называют анонимными категориями.