Swift(iOS/macOS)中的数据验证:库与方法

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

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

开始课程

Swift(iOS/macOS)中的数据验证:库、工具与实践示例



数据验证是开发高质量 iOS 和 macOS 应用的关键方面之一。如果没有可靠的输入数据检查,用户可能会遇到错误、界面行为异常甚至崩溃。本文将介绍 Swift 中数据验证的最佳库和方法,并提供具体的代码示例。



为什么需要数据验证?

验证可以:

  • 确保输入数据的正确性(电子邮件、电话号码、密码)。
  • 防止服务器端错误。
  • 通过即时反馈改善用户体验。
  • 提高应用程序的安全性。


Swift 中流行的验证库

目前有多个经过验证的库可以简化数据验证:

  • Validated — 一个轻量级库,支持 Combine 和 SwiftUI。
  • SwiftValidator — 最早的文本字段验证库之一。
  • Validator(来自 Adamwaite)— 一个简单灵活的工具,内置多种规则。
  • Regex — 不是库,而是用于处理正则表达式的内置机制,常用于验证。


示例 1:使用正则表达式验证电子邮件

最简单的方法是使用 NSRegularExpression 或内置方法 range(of:options:)。

import Foundation

func isValidEmail(_ email: String) -> Bool { let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,64}" let emailPredicate = NSPredicate(format: "SELF MATCHES %@", emailRegex) return emailPredicate.evaluate(with: email)}

// 使用print(isValidEmail("test@example.com")) // trueprint(isValidEmail("invalid-email")) // false


示例 2:密码验证(长度、数字和字符)

通常要求密码至少包含 8 个字符,至少一个数字和一个特殊字符。

func isValidPassword(_ password: String) -> Bool {    // 至少 8 个字符    guard password.count >= 8 else { return false }        // 检查是否包含数字    let digitRegex = ".*[0-9]+.*"    let digitPredicate = NSPredicate(format: "SELF MATCHES %@", digitRegex)    guard digitPredicate.evaluate(with: password) else { return false }        // 检查是否包含特殊字符    let specialCharRegex = ".*[!@#$%^&*()_+\\\\-=\\\\[\\\\]{};':\\"\\\\\\\\|,./<>?]+.*"    let specialPredicate = NSPredicate(format: "SELF MATCHES %@", specialCharRegex)    guard specialPredicate.evaluate(with: password) else { return false }        return true}

print(isValidPassword("Pass123!")) // trueprint(isValidPassword("weak")) // false


示例 3:使用 Validator 库(Adamwaite)

Validator 库提供了便捷的链式规则语法。

import Validator

let emailRule = ValidationRulePattern(pattern: EmailValidationPattern.standard, error: "无效的电子邮件")let emailResult = "user@domain.com".validate(rule: emailRule)

switch emailResult {case .valid: print("电子邮件有效")case .invalid(let errors): print("错误:\\(errors.first?.message ?? "")")}


示例 4:用于验证年龄的自定义验证器

有时需要检查用户是否超过特定年龄。

struct AgeValidator {    static func isValid(age: Int) -> Bool {        return age >= 18 && age <= 120    }}

// 使用let userAge = 25if AgeValidator.isValid(age: userAge) { print(

推荐