Pourquoi Swift et ChatGPT sont un coup de foudre dès le premier commit
Imaginez : vous écrivez une application en Swift, et soudain vous réalisez qu'il lui manque un « cerveau ». L'utilisateur pose une question, et votre code reste muet comme une carpe. Vous voyez ? Jusqu'à récemment, ajouter de l'intelligence à une application iOS était compliqué : il fallait soit écrire son propre modèle NLP, soit intégrer des bibliothèques lourdes. Maintenant, tout a changé.
L'API ChatGPT sur Swift n'est pas qu'une fonctionnalité à la mode, c'est un véritable outil qui peut transformer votre application en assistant intelligent. Vous voulez créer un assistant IA, un générateur de contenu ou simplement un chatbot ? Tout cela peut être réalisé en une soirée. Dans cet article, je vais vous montrer comment connecter l'API OpenAI en Swift à partir de zéro, sans magie superflue ni architectures complexes. C'est parti !
De quoi avons-nous besoin ?
Avant de plonger dans le code, voyons les outils nécessaires. Pour travailler avec ChatGPT sur iOS, vous n'avez besoin que de trois choses :
- Une clé API OpenAI — inscrivez-vous sur platform.openai.com, créez une clé dans la section API Keys. Gardez-la précieusement — ne la commitez pas dans Git !
- Xcode 15+ — pour utiliser le Swift moderne avec async/await.
- Une compréhension de base de SwiftUI ou UIKit — je montrerai un exemple avec SwiftUI, mais la logique réseau est universelle.
Prêts ? Alors ouvrez Xcode, créez un nouveau projet (iOS App, SwiftUI, langue — Swift) et commençons à écrire du code.
Architecture de la requête : comment « parler » à ChatGPT en Swift
OpenAI fournit une API REST. Cela signifie que nous allons envoyer des requêtes HTTP et recevoir des réponses JSON. Toute la communication passe par l'endpoint https://api.openai.com/v1/chat/completions. Nous devons envoyer une requête POST avec un corps contenant un tableau de messages (rôle + contenu) et recevoir une réponse du modèle.
Créons un modèle de données pour la requête et la réponse. C'est un exemple parfait d'utilisation de Decodable en Swift.
// Modèle pour un seul messagestruct Message: Codable { let role: String // "system", "user" ou "assistant" let content: String}
// Structure de la requête à l'APIstruct ChatGPTRequest: Codable { let model: String let messages: [Message] let temperature: Double?
init(model: String = "gpt-4o-mini", messages: [Message], temperature: Double = 0.7) { self.model = model self.messages = messages self.temperature = temperature }}
// Structure de la réponsestruct ChatGPTResponse: Codable { struct Choice: Codable { let message: Message let finishReason: String?
enum CodingKeys: String, CodingKey { case message case finishReason = "finish_reason" } }
let choices: [Choice]}Notez les CodingKeys — en Swift, les noms de propriétés sont généralement en camelCase, tandis que l'API renvoie en snake_case. C'est une technique standard pour le travail avec les API en Swift.
Couche réseau : URLSession + async/await
Passons maintenant à la partie la plus intéressante — l'envoi de la requête. J'utiliserai le moderne async/await pour que le code soit propre et lisible. Pas de closures ni de délégués — seulement de l'élégance.
class ChatGPTService {
private let apiKey: String private let session = URLSession.shared private let baseURL = URL(string: "https://api.openai.com/v1/chat/completions")!
init(apiKey: String) { self.apiKey = apiKey }
func sendMessage(_ text: String) async throws -> String {
// Formation des messages : prompt système + requête utilisateur let systemMessage = Message(role: "system", content: "Tu es un assistant utile. Réponds brièvement et de manière concise.") let userMessage = Mess