Constante globale

Hello à tous,

Dans le cas ou mon app fait appel à une API web, je vais devoir stocker par exemple le nom de domaine et pouvoir y accéder n’importe où sans le retaper (et me tromper, ou que ça devienne ingérable si le NDD venait à changer).

J’avais pensé à faire un fichier Constants.swift pour y stocker toutes mes globales. Ou d’utiliser les Struct peut-être.

Quelle serait, à votre avis, le meilleur moyen de gérer cela ?

Merci :slight_smile:

J’avais pensé à quelque chose comme ça (fichier Constants.swift)

struct Constants {
    struct API {
     static let url = "https://example.com"
     ...
   }
}

Avec l’appel comme ceci :

var request = Constants.API.url

1 « J'aime »

Moi je fait juste un fait .swift et je mais directement tout mes constante dedans sans rien mettre d’autre.

Exemple :

import Foundation

let urlGoogle = "http://www.google.com"

Après, vous aurez l’autocompletion dans tout vos fichiers. par contre, il faut lancer un compilation après avoir défini votre constante sinon, celle-ci n’est pas prise en compte par l’autocompletion.

Ok, la limitation que je vois à ce code c’est d’être obligé d’utiliser des noms de variables uniques non ?

Alors qu’avec la structure, on peut se permettre d’appeler cette variable “url”.

Vous en dites quoi ?

Vous pouvez aussi l’appeler url, j’ai mis urlGoogle dans exemple pour préciser que c’est celle de Google mais, juste url aurais aussi fonctionné.

Et effectivement elle sera unique, vous ne pourrez pas appeler une autre variable “url” sans avoir un problème.
Mais, si vous utilisez qu’un seul url pour tout votre application c’est normalement suffisant.
Par contre si, vous en utiliser plusieurs il faudra les nommers spécifiquement comme dans mon exemple ou faire comme vous avec un struct nommé “url” et mettre dedans par exemple google, facebook, etc … comme ça quand vous les taper ça fait “url.google”.

Après les deux technique fonctionne vous avez juste à prendre celle que vous préférez.

Je préfère aussi la solution de Yann pour organiser un minimum les constantes. Je n’aime pas trop avoir des constantes globales qui flottent “à la PHP”.
Par contre une autre solution est d’utiliser les constantes statiques comme dans ta structure mais directement dans la classe/structure qui paraît la plus adaptée au lieu de créer la structure Constantes.
Par exemple si tu as une classe DownloadManager, met ta structure API dedans comme tu l’as fait dans Constantes.
Ça évite un jour de se retrouver avec une classe Constante géante car tu vas vite voir qu’il y en a partout des valeurs constantes comme les urls :slight_smile:

1 « J'aime »

Merci Maxime pour l’idée du Manager, je vais aller dans ce sens. :slight_smile:

1 « J'aime »

C’est peut-être car, c’est une des première chose que j’ai appris après le HTML/CSS et le Javascript.
La, je tente aussi de voir le swift coté serveur pour remplacer le PHP et vue ce que j’ai vue niveau performance c’est beaucoup mieux que les autres languages serveur.