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

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) : comment choisir un outil sans se tromper



La validation des données est l'une des étapes clés du développement d'applications mobiles et de bureau en Swift. Sans elle, il est impossible de garantir l'exactitude des saisies utilisateur, la sécurité des données et le fonctionnement stable de l'application. Dans cet article, nous analyserons les bibliothèques et approches populaires de validation dans l'écosystème Apple, et fournirons des exemples de code pour iOS et macOS.



Pourquoi la validation des données en Swift est-elle nécessaire ?

L'utilisateur peut saisir n'importe quoi : d'une chaîne vide à une injection SQL. La validation permet de :

  • prévenir les données incorrectes (email sans @, mot de passe de moins de 8 caractères) ;
  • protéger l'application contre les attaques (XSS, injections) ;
  • améliorer l'UX — signaler instantanément les erreurs ;
  • respecter les règles métier (par exemple, âge > 18 ans).


Bibliothèques populaires pour la validation en Swift

Bien que Foundation propose des outils de base (NSPredicate, expressions régulières), pour des scénarios complexes, il est préférable d'utiliser des bibliothèques spécialisées.



1. Validator (par eMKa)

L'une des bibliothèques open source les plus populaires. Prend en charge la validation des chaînes, des nombres, des dates, ainsi que des règles personnalisées.

// Installation via SPM : https://github.com/eMKa/Validatorimport Validator

let emailRule = ValidationRulePattern(pattern: EmailValidationPattern.standard)let result = "test@example.com".validate(rule: emailRule)switch result {case .valid: print("Email valide")case .invalid(let errors): print("Erreur : \\(errors.first?.message ?? "Erreur inconnue")")}

La bibliothèque prend en charge les chaînes de règles : "password123".validate(rules: [lengthRule, uppercaseRule, digitRule]). Idéale pour les formulaires d'inscription.



2. SwiftValidator (par jpotts18)

Bibliothèque légère pour la validation des champs de saisie. Fonctionne avec UIKit et SwiftUI. Permet de définir des règles pour chaque champ de texte.

// Installation : https://github.com/jpotts18/SwiftValidatorimport SwiftValidator

let validator = Validator()validator.registerField(emailTextField, rules: [RequiredRule(), EmailRule()])validator.registerField(passwordTextField, rules: [RequiredRule(), MinLengthRule(length: 8)])

validator.validate { errors in if errors.isEmpty { print("Tous les champs sont valides") } else { for (field, error) in errors { print("Erreur dans \\(field) : \\(error.errorMessage)") } }}

Idéale pour les formulaires avec de nombreux champs — permet une gestion centralisée de la validation.



3. Regex (solution intégrée Foundation)

Si vous ne souhaitez pas ajouter de dépendances externes, utilisez NSRegularExpression. Convient pour les vérifications simples.

func isValidEmail(_ email: String) -> Bool {    let pattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,64}"    let regex = try? NSRegularExpression(pattern: pattern)    let range = NSRange(location: 0, length: email.utf16.count)    return regex?.firstMatch(in: email, range: range) != nil}

// Utilisationif isValidEmail("user@example.com") { print("Email valide")} else { print("Format d'email invalide")}

Inconvénient : difficile à maintenir et à étendre. Pour les grands projets, il est préférable d'utiliser des bibliothèques.



4. ValidatedPropertyKit (par la communauté)

Approche moderne utilisant les property wrappers. Permet d'annoter directement les propriétés du modèle.

// Installation : https://github.com/SvenTiigi/ValidatedPropertyKitimport ValidatedPropertyKit

struct User { @Validated(.nonEmpty, .email) var email: String @Validated(.minLength(8), .containsUppercase) var password: String}

var user = User()user.email = "test" // Erreur : email invalideuser.password = "weak" // Erreur : mot de passe trop courtprint(us

Recommendations