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

Ответ

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

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

  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.

Ответ 18+ 🔞

О, слушай, про константы в коде! Это ж святое, блядь! Если ты их как попало раскидаешь — потом сам же и будешь ебаться, как слепой крот в трёх соснах, когда через полгода что-то менять придётся. Так что давай по-человечески, а не как последний распиздяй.

Как не надо, ёпта: Просто раскидать let по всему файлу — это пиздец, а не подход. Типа:

let timeout = 30.0
let cellId = "MyCell"
let secretKey = "SUPER_SECRET_123" // О, да ты, блядь, гений! Прям в код засунул! Теперь весь гитхаб твой ключ знает!

Это путь в никуда, в рот меня чих-пых! Через месяц уже не вспомнишь, где что лежит и зачем.

Нормальные способы, блядь:

  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 — это, блядь, маст-хэв для всех текстов в интерфейсе. Хочешь на испанском? Пожалуйста! Не надо в коде "Привет" искать.
    • .xcconfig файлы — САМОЕ ВАЖНОЕ, БЛЯДЬ! Сюда ты все свои секреты пихаешь! Ключи API, пароли, всякую такую пизду. А сам файл в .gitignore закидываешь, чтобы на гитхаб не улетело, а то опозоришься на весь интернет, пидарас шерстяной.
      // Берёшь ключ из настроек, а не из кода!
      let apiKey = Bundle.main.object(forInfoDictionaryKey: "API_KEY") as? String ?? ""

Главные правила, чтобы не быть мудаком:

  • static let — твой лучший друг. Константа она и есть константа, её не надо менять.
  • Группируй по смыслу. Не вали всё в одну кучу под названием Constants. Сделай NetworkConstants, UIConstants, Keys. Читаемость — овердохуища!
  • ПОВТОРЯЮ, ДЛЯ ТУГОВОЗНЫХ: СЕКРЕТЫ НЕ В КОД! Никогда, блядь, никогда не пиши ключи прямо в .swift файле. Используй переменные окружения или эти .xcconfig файлы. Иначе однажды проснёшься с пустым аккаунтом на AWS и счётом в пару тысяч баксов, вот тогда и вспомнишь этот разговор, ебать тебя в сраку.

Вот и вся магия, чувак. Делай аккуратно, и код не превратится в помойку, в которую страшно заглянуть.