Опционалы в Swift представляют собой тип, который может содержать либо значение типа T (завернутое значение), либо nil, означающее отсутствие значения.
Основные механизмы для работы с опционалами:
Optional Binding (if let, guard let): Безопасное извлечение значения из опционала.
if let: Извлекает значение и присваивает его временной константе или переменной, если опционал содержит значение. Блок кода выполняется только в этом случае.
swift
guard let: Извлекает значение. Если опционал nil, выполняется блок else (обычно для выхода из текущего scope). Если значение успешно извлечено, оно доступно после guard в текущем scope.
swift
Optional Chaining (?): Позволяет вызывать свойства, методы и индексы на опционале. Если опционал nil на любом этапе цепочки, вся цепочка прерывается, и результат имеет тип опционала, содержащего nil.
swift
Forced Unwrapping (!): Небезопасное извлечение значения. Приводит к ошибке времени выполнения (краш), если опционал содержит nil. Следует использовать с большой осторожностью, только когда точно известно, что опционал не nil.
swift
Nil-Coalescing Operator (??): Предоставляет значение по умолчанию, если опционал nil.
swift
Implicitly Unwrapped Optionals (!): Опционалы, которые автоматически извлекаются при использовании. Объявляются с помощью !. Следует использовать, когда значение будет гарантированно присвоено до первого использования, но не обязательно при инициализации (например, IBOutlets). При доступе, когда значение nil, происходит ошибка времени выполнения.
swift
"Контракты" в этом контексте не являются отдельным языковым механизмом Swift, аналогичным контрактам в других языках. Swift обеспечивает безопасность посредством системы типов, включая опционалы и контроль доступа, что помогает явно выражать намерения и предотвращать ошибки. Опционалы служат "контрактом", указывающим на возможность отсутствия значения.