В Swift классы, будучи ссылочными типами, всегда хранятся в heap-памяти. Стек используется в основном для хранения value-типов (структур, перечислений, базовых типов), а также ссылок на объекты, хранящиеся в heap.
Хотя классы сами по себе не хранятся в стеке, ссылка на экземпляр класса может храниться в стеке, например, как локальная переменная внутри функции.
Есть специфические случаи, когда оптимизатор может разместить экземпляр класса в стеке (так называемая Stack Allocation), но это не стандартное поведение и зависит от сложных эвристик компилятора. Это происходит только с очень простыми классами, чье время жизни полностью известно во время компиляции и которые не используются за пределами локального скоупа.
swift