Swift: Structure and Class (Структура и класс)

Структуры и классы — это конструкции позволяющие инкапсулировать в себе как переменные так и методы, выполняющие действия над ними.

Структуры и классы очень схожи по синтаксису и возможностям
Уникальные возможности классов:
— наследование
— приведение типов (type casting)
— деинициализатор
— классы — ссылочного типа (reference type), а структуры — значимого типа (value type)

Пример синтаксиса

Создаем просто

У структур есть возможность создавать экземпляр указывая значение для всех свойств

Доступ к свойствам через точку

Как было указано выше, структуры — значимого типа, следовательно если присвоить в другую переменную экземпляр структуры — он будет скопирован, и его значения можно будет менять независимо

В случае же структуры а не класса, если обе переменные будут ссылаться на один и тот же обьект, и изменить внутренее состояние одной из них — у второй оно так же будет изменено на новое.

В обоих случаях выведется 0

Более того, в этом случае выражение pixel === samePixel равно true. Т.к. оператор === это оператор не равенства ==, а идентичности, обе переменные ссылаются на один и тот же обьект

Таким образом структуры следует использовать для хранения небольшого числа простых типов данных (Int, Float, String, etc). Так что вариантами могут быть структуры для хранения координат точки, вектора и прочего
При передаче в качестве параметра структура копируется, что может вызвать провалы в производительности и повышенный расход памяти
С другой стороны String, Array, Dictionary — это все структуры, и если бы они всегда копировались при передачи в качестве параметров — swift был бы крайне медленным. Но разработчики уверяют, что копия делается только в случае необходимости (если их значение внутри функции меняется, полагаю). Я проверял отладчиком — действительно пока изменений в переданной строке нет — внутренний указатель внутри функции для строки тот же что и был до вызова функции, но как только мы меняем значение строки — происходит копирование строки в другой участок памяти

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *