Может ли структура (struct) в Swift содержать свойство другого типа структуры?

«Может ли структура (struct) в Swift содержать свойство другого типа структуры?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, может. Это стандартная практика для композиции типов.

Пример:

struct Point {
    var x: Double
    var y: Double
}

struct Rectangle {
    var origin: Point // Вложенная структура
    var size: Point
}

Важные нюансы:

  1. Семантика копирования (Value Semantics): При копировании экземпляра Rectangle копируются и все его вложенные структуры (origin и size).
  2. Запрет прямой рекурсии: Структура не может содержать свойство своего же типа, так как это создало бы бесконечный размер.
    struct Node { // Ошибка компиляции: Value type 'Node' cannot have a stored property that recursively contains it
        var next: Node?
    }
  3. Косвенная рекурсия: Для рекурсивных структур используйте indirect с перечислениями (enum).
    indirect enum LinkedListNode {
        case value(Int, next: LinkedListNode?)
    }