Ответ
Optional Chaining — это процесс последовательных вызовов свойств, методов и сабскриптов опционального значения. Если любой компонент в цепочке равен nil, вся цепочка изящно завершается и возвращает nil.
Синтаксис: Используется знак вопроса (?.) вместо точки (.).
Пример:
class Person {
var residence: Residence?
}
class Residence {
var address: Address?
func printAddress() { print("Address printed") }
}
class Address {
var street = "123 Main St"
}
let john = Person()
// john.residence в данный момент nil
// 1. Доступ к свойству через цепочку
let streetName = john.residence?.address?.street // Тип String?
// Результат: nil, так как residence == nil
// 2. Вызов метода через цепочку
if john.residence?.printAddress() != nil {
// Метод был вызван
} else {
// Метод не был вызван, так как residence == nil
}
// Результат: ничего не печатает, условие переходит в else
Ключевые особенности:
- Безопасность: Предотвращает краш при обращении к свойству
nil. - Короткое замыкание: Как только встречается
nil, дальнейшие вызовы не выполняются. - Возвращаемый тип: Результат optional chaining всегда является опционалом, даже если конечное свойство неопционально.
- Сабскрипты: Работает и с доступом по индексу или ключу:
dict["key"]?.property. - Принудительное извлечение: Можно комбинировать с force unwrap (
!.), но это опасно и сводит на нет безопасность цепочки.