Классы и структуры дают разработчикам Swift возможность создавать собственные сложные типы со свойствами и методами, но у них есть пять важных отличий:
Comparision | Class | Structure |
---|---|---|
Type | Classes are reference types | Structures are value types |
Initializer | Классы не имеют синтезированных поэлементных инициализаторов (memberwise initializers) | Struct gets a default initializer automatically |
Deinit | У классов есть деинициализаторы - методы, вызываемые при уничтожении экземпляра класса | У структур нет deinit |
Inheritance | Classes have an inheritance that allows one class to inherit the characteristics of another | Structures do not support inheritance |
Storage | Class instances are stored on the heap | Structure properties are stored on the stack |
Unique of copy | Копии классов фактически указывают на одни и те же общие данные | Копии структур всегда уникальны |
Thread−safe | Classes are not fully thread−safe | The structure is thread−safe or singleton at all times |
Recreating | При изменении свойств в классе он не пересоздается, поэтому в классах нужно помечать изменчивые переменные ключевым словом @Published |
При изменении свойства в структуре - она каждый раз пересоздается, поэтому структура автоматически подменяет view экраны |
5.3.1.1 List Value and Reference types Theme | Back To iOSWiki Contents | 5.3.1.3 Reference Types Folder