Validación de datos en Swift (iOS/macOS): cómo elegir la herramienta adecuada y no equivocarse
La validación de datos es una de las etapas clave en el desarrollo de aplicaciones móviles y de escritorio en Swift. Sin ella, es imposible garantizar la corrección de la entrada del usuario, la seguridad de los datos y el funcionamiento estable de la aplicación. En este artículo, analizaremos bibliotecas y enfoques populares para la validación en el ecosistema de Apple, y proporcionaremos ejemplos de código para iOS y macOS.
¿Por qué es necesaria la validación de datos en Swift?
El usuario puede ingresar cualquier cosa: desde una cadena vacía hasta una inyección SQL. La validación ayuda a:
- prevenir datos incorrectos (email sin @, contraseña de menos de 8 caracteres);
- proteger la aplicación de ataques (XSS, inyecciones);
- mejorar la UX — resaltar errores al instante;
- cumplir con las reglas de negocio (por ejemplo, edad > 18 años).
Bibliotecas populares para validación en Swift
Aunque Foundation tiene herramientas básicas (NSPredicate, expresiones regulares), para escenarios complejos es mejor usar bibliotecas especializadas.
1. Validator (por eMKa)
Una de las bibliotecas de código abierto más populares. Admite validación de cadenas, números, fechas y reglas personalizadas.
// Instalación mediante 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 válido")case .invalid(let errors): print("Error: \\(errors.first?.message ?? "Error desconocido")")}La biblioteca admite cadenas de reglas: "password123".validate(rules: [lengthRule, uppercaseRule, digitRule]). Ideal para formularios de registro.
2. SwiftValidator (por jpotts18)
Biblioteca ligera para validación de campos de entrada. Funciona con UIKit y SwiftUI. Permite definir reglas para cada campo de texto.
// Instalación: 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("Todos los campos son válidos") } else { for (field, error) in errors { print("Error en \\(field): \\(error.errorMessage)") } }}Excelente para formularios con muchos campos — permite gestionar la validación de forma centralizada.
3. Regex (solución integrada de Foundation)
Si no desea agregar dependencias externas, use NSRegularExpression. Adecuado para verificaciones 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}
// Usoif isValidEmail("user@example.com") { print("Email válido")} else { print("Formato de email incorrecto")}Desventaja: difícil de mantener y ampliar. Para proyectos grandes, es mejor usar bibliotecas.
4. ValidatedPropertyKit (de la comunidad)
Enfoque moderno que utiliza property wrappers. Permite anotar propiedades del modelo directamente.
// Instalación: 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" // Error: email no válidouser.password = "weak" // Error: contraseña demasiado cortaprint(us También en la biblioteca
Colas de tareas en C# (.NET): System.Threading.Channels, Hangfire y RabbitMQ
Caché en Kotlin: Redis, Caffeine y Ehcache — guía completa
Validación de datos en Swift: biblioteca Validator
Biblioteca WebSocket para C# (.NET): SignalR y alternativas