Swift : bien plus qu'un langage pour les applications « Apple »
\n\nQuand on dit « Swift », beaucoup imaginent immédiatement une énième application pour commander un café ou un tracker de fitness. Mais la réalité est bien plus intéressante. Ce langage a depuis longtemps dépassé le cadre du bac à sable iOS et est utilisé dans des projets où des millions d'utilisateurs et des milliards de requêtes par jour sont en jeu. Uber, Airbnb, Lyft — ce ne sont pas que des noms, ce sont des exemples concrets de la manière dont Swift dans des projets réels résout des problèmes non triviaux.
\n\nDans cet article, nous allons analyser des cas concrets d'entreprises qui ont choisi Swift non pas parce que c'est « à la mode », mais parce que c'était la meilleure solution technique. Vous verrez non seulement des faits bruts, mais aussi des exemples de code en Swift que vous pouvez adapter à vos propres besoins. C'est parti !
\n\nUber : comment Swift a sauvé les performances et la lisibilité du code
\n\nL'un des cas d'entreprise les plus marquants avec Swift est l'histoire d'Uber. En 2016, l'équipe a pris une décision forte : réécrire les modules clés d'Objective-C vers Swift. La raison ? Un taux élevé de plantages de l'application sur les anciens appareils et la complexité de la maintenance du code legacy.
\n\nQu'est-ce qui a été réécrit exactement ?
\n\n- \n
- Le module de géolocalisation et d'affichage de la carte \n
- Le système de calcul du prix de la course \n
- L'interface conducteur (écran principal) \n
Le principal problème était qu'Objective-C n'offrait pas une sécurité de typage suffisante. De ce fait, les erreurs n'apparaissaient qu'à l'exécution, et non à la compilation. Swift a corrigé cela.
\n\nExemple de code : traitement sécurisé des valeurs optionnelles
\n\n// Avant : Objective-C — on peut passer nil et planter\n- (void)updatePrice:(NSNumber *)price {\n if (price == nil) {\n return; // oublié de gérer — crash\n }\n self.priceLabel.text = [NSString stringWithFormat:@"$%.2f", [price floatValue]];\n}\n\n// Après : Swift — le compilateur ne vous laissera pas oublier\nfunc updatePrice(_ price: Double?) {\n guard let validPrice = price else {\n print("Price is nil, showing placeholder")\n return\n }\n priceLabel.text = String(format: "$%.2f", validPrice)\n}\n\nRésultat : le nombre de plantages a diminué de 35 % au cours des trois premiers mois suivant la sortie. Swift dans des projets réels a montré que la sécurité de typage n'est pas une fonctionnalité abstraite, mais de l'argent et des nerfs d'utilisateurs.
\n\nAirbnb : optimisation du travail réseau et de l'asynchrone
\n\nAirbnb est un autre géant qui utilise activement Swift. Mais leur histoire ne parle pas de réécriture, mais de construction à partir de zéro. Lorsque l'équipe a décidé de créer une nouvelle application pour les hôtes (Airbnb for Hosts), ils ont immédiatement choisi Swift.
\n\nDéfi : travailler avec un grand nombre d'images et de réservations
\n\nLes hôtes téléchargent des dizaines de photos, et chacune doit être compressée, traitée et envoyée au serveur. En Objective-C, cela se transformait en « enfer des callbacks ». Swift avec son async/await a rendu le code linéaire et compréhensible.
\n\nExemple de code : téléchargement asynchrone d'images
\n\nimport UIKit\n\nstruct ImageUploader {\n \n func uploadImage(_ image: UIImage) async throws -> URL {\n guard let imageData = image.jpegData(compressionQuality: 0.8) else {\n throw UploadError.invalidImage\n }\n \n let url = URL(string: "https://api.airbnb.com/upload")!\n var request = URLRequest(url: url)\n request.httpMethod = "POST"\n request.httpBody = imageData\n \n let (data, response) = try await URLSession.shared.data(for: request)\n \n guard let httpResponse = response as? HTTPURLResponse,\n httpResponse.statusCode == 200 else {\n throw UploadError.serverError\n }\n \n let json = try JSONDecoder().decode(UploadResponse.self, from: data)\n return json.imageURL\n }\n}\n\nenum UploadError: Error {\n case invalidImage\n case serverError\n}\n\nstruct UploadResponse: Codable {\n let imageURL: URL\n}\n\nCet exemple —