Можно ли объявить структуру внутри extension в Swift?

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

Ответ

Да, Swift позволяет объявлять вложенные типы, включая структуры, внутри extension. Это полезно для организации связанных типов и логики.

Пример объявления цветовой палитры:

extension UIColor {
    struct Palette {
        static let primary = UIColor(red: 0.2, green: 0.4, blue: 0.6, alpha: 1)
        static let secondary = UIColor(red: 0.8, green: 0.1, blue: 0.3, alpha: 1)
        static let accent = UIColor(red: 0.9, green: 0.8, blue: 0.1, alpha: 1)
    }
}

// Использование:
view.backgroundColor = UIColor.Palette.primary

Особенности:

  • Вложенная структура наследует уровень доступа extension
  • Можно добавлять статические свойства, методы, инициализаторы
  • Нельзя добавлять stored properties в сам extension, но можно во вложенной структуре
  • Подходит для:
    • Группировки констант
    • Вспомогательных типов данных
    • Namespace для связанных значений