Datenvalidierung in Swift (iOS/macOS): Wie wählt man das richtige Werkzeug aus und vermeidet Fehler
Datenvalidierung ist eine der Schlüsselphasen bei der Entwicklung von mobilen und Desktop-Anwendungen in Swift. Ohne sie sind die Korrektheit der Benutzereingaben, die Datensicherheit und ein stabiler Betrieb der Anwendung nicht gewährleistet. In diesem Artikel analysieren wir gängige Bibliotheken und Ansätze zur Validierung im Apple-Ökosystem und geben Codebeispiele für iOS und macOS.
Warum ist Datenvalidierung in Swift wichtig?
Ein Benutzer kann alles Mögliche eingeben: von einer leeren Zeichenfolge bis hin zu einer SQL-Injection. Validierung hilft:
- ungültige Daten zu verhindern (E-Mail ohne @, Passwort kürzer als 8 Zeichen);
- die Anwendung vor Angriffen zu schützen (XSS, Injections);
- die Benutzererfahrung zu verbessern – Fehler sofort hervorheben;
- Geschäftsregeln einzuhalten (z. B. Alter > 18 Jahre).
Beliebte Bibliotheken für die Validierung in Swift
Obwohl Foundation grundlegende Werkzeuge (NSPredicate, reguläre Ausdrücke) bietet, sind für komplexe Szenarien spezialisierte Bibliotheken besser geeignet.
1. Validator (von eMKa)
Eine der beliebtesten Open-Source-Bibliotheken. Unterstützt die Validierung von Zeichenfolgen, Zahlen, Daten sowie benutzerdefinierte Regeln.
// Installation über 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("E-Mail ist gültig")case .invalid(let errors): print("Fehler: \\(errors.first?.message ?? "Unbekannter Fehler")")}Die Bibliothek unterstützt Regelketten: "password123".validate(rules: [lengthRule, uppercaseRule, digitRule]). Ideal für Registrierungsformulare.
2. SwiftValidator (von jpotts18)
Eine leichte Bibliothek zur Validierung von Eingabefeldern. Funktioniert mit UIKit und SwiftUI. Ermöglicht die Festlegung von Regeln für jedes Textfeld.
// 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("Alle Felder sind gültig") } else { for (field, error) in errors { print("Fehler in \\(field): \\(error.errorMessage)") } }}Ideal für Formulare mit vielen Feldern – die Validierung kann zentral gesteuert werden.
3. Regex (integrierte Foundation-Lösung)
Wenn Sie keine externen Abhängigkeiten einbinden möchten, verwenden Sie NSRegularExpression. Geeignet für einfache Prüfungen.
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}
// Verwendungif isValidEmail("user@example.com") { print("E-Mail ist gültig")} else { print("Ungültiges E-Mail-Format")}Nachteil: schwer zu warten und zu erweitern. Für größere Projekte sind Bibliotheken besser geeignet.
4. ValidatedPropertyKit (aus der Community)
Ein moderner Ansatz mit Property Wrappers. Ermöglicht die direkte Annotation von Modelleigenschaften.
// 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" // Fehler: ungültige E-Mailuser.password = "weak" // Fehler: Passwort zu kurzprint(us