Pourquoi un fichier de constantes globales en Swift ?
\n\nChaque développeur iOS a rencontré au moins une fois dans sa vie une situation où les mêmes valeurs — URL du serveur, clés API, identifiants de cellules, marges — sont dispersées dans tout le projet. Et voilà que le chef dit : « Change l’URL de base ». Vous ouvrez le projet, et la quête commence : trouver toutes les occurrences de "https://old.api.com" et les remplacer par la nouvelle. Cela vous dit quelque chose ?
C’est exactement pour cela qu’un fichier de constantes globales en Swift est nécessaire — un endroit unique où sont stockés tous les « nombres magiques » et chaînes de caractères. Dans cet article, nous analyserons les questions les plus fréquentes de Stack Overflow (le sujet a des milliers de vues !) et donnerons des réponses claires avec des exemples de code. C’est parti !
\n\nQuestion 1 : Comment créer un simple fichier de constantes en Swift ?
\n\nLa méthode la plus directe est d’utiliser une struct avec des propriétés statiques. Pourquoi une struct plutôt qu’un class ? Parce que les structures sont des types de valeur, elles sont plus légères et ne nécessitent pas d’initialiseur.
// Constants.swift\nimport Foundation\n\nstruct AppConstants {\n static let baseURL = "https://api.myapp.com/v1"\n static let apiKey = "your-secret-key-here"\n static let defaultTimeout: TimeInterval = 30.0\n static let maxRetryCount = 3\n}\n\nUtilisation simple : AppConstants.baseURL. Voilà, plus de chaînes magiques. Les constantes Swift avec let garantissent que la valeur ne sera pas modifiée accidentellement.
Pourquoi ne pas utiliser des variables globales ?
\n\nOn pourrait bien sûr écrire :
\n\nlet baseURL = "https://api.myapp.com/v1"\n\nMais c’est un fichier de constantes globales en Swift dans sa forme la plus primitive. Problème : pas d’espace de noms. Si vous avez 50 constantes, vous vous perdrez rapidement sur laquelle correspond à quoi. La struct résout ce problème élégamment.
Question 2 : Enum ou Struct — que choisir pour les constantes ?
\n\nSur Stack Overflow, les débats sont animés. Analysons les deux approches.
\n\nStruct (option populaire)
\n\nstruct UIConstants {\n static let cornerRadius: CGFloat = 12.0\n static let defaultPadding: CGFloat = 16.0\n static let animationDuration: Double = 0.3\n}\n\nAvantages : familier, on peut créer des instances (bien que généralement inutile), facile à étendre via extension.
\n\nInconvénients : techniquement, on peut écrire UIConstants(), ce qui n’a pas de sens.
Enum (option plus stricte)
\n\nenum NetworkConstants {\n static let baseURL = "https://api.myapp.com/v1"\n static let apiVersion = "2.0"\n static let defaultHeaders: [String: String] = [\n "Content-Type": "application/json"\n ]\n}\n\nAvantages : impossible de créer une instance — le compilateur ne le permettra pas. Espace de noms pur. Idéal pour les constantes enum Swift.
\n\nInconvénients : certains considèrent cela comme un « hack » — utiliser enum en dehors de son usage prévu.
\n\nMon verdict : si vous voulez être un développeur « correct » et vous protéger contre la création accidentelle d’instance — utilisez enum. Si vous travaillez en équipe où tout le monde est habitué à struct — utilisez struct. Les deux options sont valides.
Question 3 : Comment organiser les constantes par catégories ?
\n\nQuand le projet grandit, un seul fichier devient un dépotoir. Solution : structures imbriquées ou fichiers séparés pour chaque catégorie.
\n\nOption A : Structures imbriquées (dans un seul fichier)
\n\nstruct Constants {\n struct Network {\n static let baseURL = "https://api.myapp.com"\n static let timeout: TimeInterval = 30\n }\n \n struct UI {\n static let cornerRadius: CGFloat = 8\n static let buttonHeight: CGFloat = 44\n }\n \n struct Storage {\n static let userDefaultsKey = "com.myapp.user"\n static let maxCacheSize =