Что такое Optional Chaining в Swift?

«Что такое Optional Chaining в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 (!.), но это опасно и сводит на нет безопасность цепочки.