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 Aussi dans la bibliothèque
Bcrypt pour JavaScript (Node.js) : guide complet avec exemples
Autorisation et authentification en C++ : bibliothèques, exemples et implémentation
Travailler avec CSV en Java : bibliothèques OpenCSV, Apache Commons CSV et Java Scanner
Rate Limiting en C++ : bibliothèques et implémentation pour la protection d'API