Вопрос проверяет понимание того, что Optional в Swift — это всего лишь обобщённый перечисляемый тип, и как обрабатываются вложенные опционалы.
Да, Optional — это enum Optional<Wrapped> { case none; case some(Wrapped) }, и вы можете определить аналог. Вложенные опционалы автоматически «схлопываются»: Int??? при развёртке одинарным ! даёт Int??, и так далее, пока не окажется Int или nil.
Определение Optional:
enum MyOptional<Wrapped> {
case none
case some(Wrapped)
}Механизм вложенности:
Int? — Optional<Int>.
Int?? — Optional<Optional<Int>>, может быть:
.none
.some(.none)
.some
Развёртка (!) и схлопывание:
При let x: Int?? = .some(nil)
x! → nil (типа Int?)
При let y: Int??? = .some(.some(nil))
y! → .some(nil) (типа Int??)
Swift позволяет цепочку x!! для полного извлечения.
Обработка в if let:
let val: Int??? = .some(.some(3))
if let first = val, let second = first, let number = second {
print(number) // 3
}Вывод:Optional — обычный enum, и вложенные уровни можно разворачивать постепенно. Создание собственного аналога помогает понять модель, но в коде пользуются стандартным.