Рекурсивный enum необходимо объявить indirect целиком либо пометить только рекурсивный case friend.
Обнаружьте дефекты в Swift‑коде
Рекурсивный 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.