Swift(iOS/macOS)中的数据验证:最佳实践与工具

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift(iOS/macOS)中的数据验证:如何选择工具并避免出错



数据验证是使用Swift开发移动和桌面应用程序的关键阶段之一。没有它,就无法保证用户输入的正确性、数据安全性和应用程序的稳定运行。在本文中,我们将探讨Apple生态系统中流行的库和验证方法,并提供iOS和macOS的代码示例。



为什么需要在Swift中进行数据验证?

用户可能会输入任何内容:从空字符串到SQL注入。验证有助于:

  • 防止不正确的数据(没有@的电子邮件,少于8个字符的密码);
  • 保护应用程序免受攻击(XSS、注入);
  • 改善用户体验——即时高亮错误;
  • 遵守业务规则(例如,年龄 > 18岁)。


Swift中流行的验证库

尽管Foundation中有基本工具(NSPredicate、正则表达式),但对于复杂场景,最好使用专门的库。



1. Validator(作者:eMKa)

最流行的开源库之一。支持字符串、数字、日期的验证,以及自定义规则。

// 通过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("电子邮件有效")case .invalid(let errors): print("错误:\\(errors.first?.message ?? "未知错误")")}

该库支持规则链:"password123".validate(rules: [lengthRule, uppercaseRule, digitRule])。非常适合注册表单。



2. SwiftValidator(作者:jpotts18)

用于验证输入字段的轻量级库。适用于UIKit和SwiftUI。允许为每个文本字段设置规则。

// 安装: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("所有字段有效") } else { for (field, error) in errors { print("\\(field)中的错误:\\(error.errorMessage)") } }}

非常适合包含大量字段的表单——可以集中管理验证。



3. Regex(Foundation内置解决方案)

如果不想引入第三方依赖,请使用NSRegularExpression。适用于简单检查。

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}

// 使用if isValidEmail("user@example.com") { print("电子邮件有效")} else { print("电子邮件格式无效")}

缺点——难以维护和扩展。对于大型项目,最好使用库。



4. ValidatedPropertyKit(来自社区)

使用property wrappers的现代方法。允许直接注解模型属性。

// 安装: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" // 错误:无效的电子邮件user.password = "weak" // 错误:密码太短print(us

推荐