Validação de dados em Swift (iOS/macOS): visão geral de ferramentas e bibliotecas
A validação de dados é um dos principais aspectos do desenvolvimento de aplicativos móveis e desktop de qualidade em Swift. Ela garante que os dados inseridos pelo usuário estejam em conformidade com o formato esperado e as regras de negócio. Neste artigo, abordaremos as principais abordagens, mecanismos integrados e bibliotecas populares para validação no ecossistema Apple.
Por que a validação é importante?
Sem validação, o aplicativo corre o risco de receber dados incorretos, o que pode levar a:
- Erros no funcionamento do backend
- Falhas inesperadas (crash) no lado do cliente
- Vulnerabilidades de segurança (SQL injection, XSS)
- Má experiência do usuário
Recursos nativos do Swift e Foundation
Swift e o framework Foundation fornecem ferramentas básicas, mas poderosas, para validação.
1. Verificação com NSPredicate
NSPredicate é uma ferramenta poderosa para filtrar e verificar dados. Ele suporta expressões regulares, tornando-o conveniente para validar emails, telefones e outras strings.
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)}
// Exemplo de usolet testEmail = "user@example.com"print(isValidEmail(testEmail)) // true2. Validação com NSRegularExpression
Para cenários mais complexos, é conveniente usar NSRegularExpression.
func isValidPassword(_ password: String) -> Bool { // Mínimo 8 caracteres, uma maiúscula, uma minúscula, um dígito 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 (sem maiúscula)Bibliotecas populares para validação
Embora os recursos nativos sejam suficientes para tarefas simples, para formulários complexos com muitas regras, é mais conveniente usar bibliotecas especializadas.
1. Validator (por Adam Waite)
Uma das bibliotecas mais populares para validação de strings em Swift. Suporta encadeamento de regras (chain validation) e validadores personalizados.
// Instalação via SPM: .package(url: "https://github.com/adamwaite/Validator.git", from: "3.0.0")import Validator
let emailRule = ValidationRulePattern(pattern: EmailValidationPattern.standard, error: "Email inválido")let nameRule = ValidationRuleLength(min: 2, max: 50, error: "O nome deve ter entre 2 e 50 caracteres")
let email = "test@mail.ru"let result = email.validate(rule: emailRule)switch result {case .valid: print("Email válido")case .invalid(let errors): print(errors.first?.message ?? "Erro")}2. SwiftValidators (por gkaimakas)
Biblioteca leve com sintaxe declarativa. Ideal para validação de campos em tempo real.
import SwiftValidators
let phone = "+7 (999) 123-45-67"if Validator.isPhoneNumber().trim().validate(phone) { print("Telefone válido")} else { print("Formato inválido")}Validação em SwiftUI com Combine
Aplicativos modernos em SwiftUI frequentemente usam Combine para validação reativa. Isso permite exibir erros instantaneamente, conforme o usuário digita.
import SwiftUIimport Combine
class RegistrationViewModel: ObservableObject { @Published var email = "" @P