Обнаружьте дефекты в Swift‑коде

Рекурсивный enum необходимо объявить indirect целиком либо пометить только рекурсивный case friend.

Короткий ответ

Что ответить на собеседовании

Рекурсивный enum необходимо объявить indirect целиком либо пометить только рекурсивный case friend.

Подробный разбор

Ответ с пояснениями

Условие

В данном фрагменте Swift‑кода объявлен тип Person и создаётся экземпляр. Код не компилируется из‑за ошибки в определении рекурсивного ассоциированного значения. Найдите ошибку.

enum Person {
    case none
    case friend(person:Person)
}
let person = Person.friend(person: .none)

Ответ

Рекурсивный enum необходимо объявить indirect целиком либо пометить только рекурсивный case friend.

Исправление:

enum Person {
    case none
    indirect case friend(person: Person)
}
let person = Person.friend(person: .none)

Без indirect ассоциированное значение снова содержит Person напрямую, и компилятор не может построить конечную раскладку такого рекурсивного типа. Косвенное хранение разрывает эту рекурсию на уровне памяти. .none здесь — пользовательский вариант enum, а не автоматически стандартный Optional.none.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее