Ответ
Ответ зависит от типа памяти самой структуры, но экземпляр класса всегда хранится в куче (heap).
Механика:
- Структура (
struct) — тип-значение. Если она локальная переменная, то хранится в стеке. Если свойство класса — в куче. - Класс (
class) — ссылочный тип. Его экземпляр всегда создается в куче. - Свойство структуры, имеющее тип класса, содержит не сам объект, а ссылку на него. Эта ссылка хранится вместе со структурой, а объект — отдельно в куче.
Наглядный пример:
class MyClass { var value = 42 }
struct MyStruct { let object = MyClass() } // свойство - ссылка на класс
var structA = MyStruct() // Структура в стеке, MyClass в куче
var structB = structA // Копируется ВСЯ структура (значение), но ссылка `object` в копии указывает на ТОТ ЖЕ объект в куче.
structB.object.value = 10
print(structA.object.value) // 10! Обе структуры разделяют один экземпляр класса.
Вывод: Объект класса живет в куче независимо от контекста. Структура хранит лишь ссылку на него.