Как правильно организовать хранение констант в iOS-проекте на Swift?

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

Ответ

Правильная организация констант улучшает читаемость, безопасность и поддерживаемость кода.

Основные подходы:

  1. Использование enum без кейсов (предпочтительный способ)

    • Невозможно создать экземпляр, что делает его идеальным контейнером для констант.
      enum Constants {
      static let apiTimeout: TimeInterval = 30.0
      static let maxRetryCount = 3
      static let cellIdentifier = "CustomCell"
      }
      // Использование: Constants.apiTimeout
  2. Структура (struct)

    • Подходит, если нужна инициализация или организация в иерархии.
      struct API {
      struct Endpoints {
          static let users = "/users"
          static let profile = "/profile"
      }
      static let baseURL = "https://api.example.com"
      }
      // Использование: API.baseURL, API.Endpoints.users
  3. Отдельные файлы для типов констант

    • Localizable.strings – для всех UI-строк, поддерживающих локализацию.
    • .xcconfig файлы – для конфигураций сборки и чувствительных данных (API keys, секреты). Эти данные не должны попадать в систему контроля версий.
      // В Info.plist или через конфигурационный файл
      let apiKey = Bundle.main.object(forInfoDictionaryKey: "API_KEY") as? String ?? ""

Лучшие практики:

  • Используйте static let для объявления неизменяемых констант.
  • Группируйте константы по функциональности или модулю.
  • Никогда не храните секреты (API keys) прямо в коде. Используйте переменные окружения или .xcconfig файлы, добавленные в .gitignore.