Validation des données en Swift (iOS/macOS) : outils et pratique

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Validation des données en Swift (iOS/macOS) : aperçu des outils et bibliothèques

La validation des données est l'un des aspects clés du développement d'applications mobiles et de bureau de qualité en Swift. Elle permet de garantir que les données saisies par l'utilisateur correspondent au format attendu et aux règles métier. Dans cet article, nous examinerons les principales approches, les mécanismes intégrés et les bibliothèques populaires pour la validation dans l'écosystème Apple.



Pourquoi la validation est-elle importante ?

Sans validation, l'application risque de recevoir des données incorrectes, ce qui peut entraîner :

  • Des erreurs dans le fonctionnement de la partie serveur
  • Des plantages inattendus (crash) côté client
  • Des vulnérabilités de sécurité (injections SQL, XSS)
  • Une mauvaise expérience utilisateur


Fonctionnalités intégrées de Swift et Foundation

Swift et le framework Foundation fournissent des outils de base mais puissants pour la validation.



1. Vérification avec NSPredicate

NSPredicate est un outil puissant pour filtrer et vérifier les données. Il prend en charge les expressions régulières, ce qui le rend pratique pour la validation des emails, téléphones et autres chaînes.

import Foundation

func isValidEmail(_ email: String) -> Bool { let emailRegEx = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,64}" let predicate = NSPredicate(format:"SELF MATCHES %@", emailRegEx) return predicate.evaluate(with: email)}

// Exemple d'utilisationlet testEmail = "user@example.com"print(isValidEmail(testEmail)) // true


2. Validation via NSRegularExpression

Pour des scénarios plus complexes, il est pratique d'utiliser NSRegularExpression.

func isValidPassword(_ password: String) -> Bool {    // Minimum 8 caractères, une majuscule, une minuscule, un chiffre    let passwordRegex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\\\d)[a-zA-Z\\\\d]{8,}$"    do {        let regex = try NSRegularExpression(pattern: passwordRegex)        let range = NSRange(location: 0, length: password.utf16.count)        return regex.firstMatch(in: password, options: [], range: range) != nil    } catch {        return false    }}

print(isValidPassword("Swift1234")) // trueprint(isValidPassword("swift123")) // false (pas de majuscule)


Bibliothèques populaires pour la validation

Bien que les outils intégrés soient suffisants pour des tâches simples, pour des formulaires complexes avec de nombreuses règles, il est plus pratique d'utiliser des bibliothèques spécialisées.



1. Validator (par Adam Waite)

L'une des bibliothèques les plus populaires pour la validation de chaînes en Swift. Elle prend en charge les chaînes de règles (chain validation) et les validateurs personnalisés.

// Installation via SPM : .package(url: "https://github.com/adamwaite/Validator.git", from: "3.0.0")import Validator

let emailRule = ValidationRulePattern(pattern: EmailValidationPattern.standard, error: "Email invalide")let nameRule = ValidationRuleLength(min: 2, max: 50, error: "Le nom doit contenir entre 2 et 50 caractères")

let email = "test@mail.ru"let result = email.validate(rule: emailRule)switch result {case .valid: print("Email valide")case .invalid(let errors): print(errors.first?.message ?? "Erreur")}


2. SwiftValidators (par gkaimakas)

Bibliothèque légère avec une syntaxe déclarative. Idéale pour la vérification des champs en temps réel.

import SwiftValidators

let phone = "+7 (999) 123-45-67"if Validator.isPhoneNumber().trim().validate(phone) { print("Téléphone valide")} else { print("Format invalide")}


Validation dans SwiftUI avec Combine

Les applications modernes en SwiftUI utilisent souvent Combine pour la validation réactive. Cela permet d'afficher les erreurs instantanément, au fur et à mesure de la saisie.

import SwiftUIimport Combine

class RegistrationViewModel: ObservableObject { @Published var email = "" @P

Recommendations