PapersPlease 0.3.2

PapersPlease 0.3.2

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布上次发布2016年6月
SPM支持 SPM

Brett Walker 维护。



PapersPlease 是一个灵活、可扩展的 iOS 文本验证库,使用苹果的 Swift 语言编写。该库的 Objective-C 版本是 PMValidation。PapersPlease 包含了用于验证注册表单等常用任务的一些常见验证类型,但它被设计成可以轻松扩展,以包含您自己的验证类型。

特性

  • 验证单个字符串对象或监听自 UIKit 对象的变化
  • 模块化 - 验证类型可以组合使用以创建复杂的验证约束
  • 可扩展 - 通过子类化 ValidatorType 轻松创建自己的验证类型
  • 自带几个有用的验证类型,可以满足大部分验证需求
  • 通过使用 ValidationManager 注册 UITextField 和 UITextView 对象,轻松实现表单验证

概览

在最简单的实现中,PapersPlease 从 ValidatorType 子类的实例开始。这些类提供验证逻辑,可以直接用于执行单个字符串的验证测试。ValidatorType 可以子类化以提供自己的自定义验证逻辑。如果您需要执行更复杂的验证测试,需要多个 ValidatorType 子类并确定字符串的整体验证状态,则可以使用 ValidationUnit 类。当您需要验证多个字符串并确定全局验证状态(例如表单验证)时,ValidationManager 类很有用。此类控制一个或多个 ValidationUnit 对象,提供整体验证状态和通知路由。此类还简化了 UIKit 文本输入类的验证。

尽管这个库按照说明工作,但 Swift 语言仍在不断发展变化,因此这个库可能会在 Swift 稳定之前有显著变化。

安装

如果您使用 CocoaPods

Podfile
pod "PapersPlease", "~> 0.3.0"

或将类目录添加到您的项目中。

基础

以下是一个基本示例,创建一个字符串长度约束,当字符串长度在 4 到 8 个字符之间时可以通过验证。

let length_type:ValidatorLengthType = ValidatorLengthType(minimumCharacters:4, maximumCharacters:8)

let unit:ValidationUnit = ValidationUnit(validatorTypes: [length_type], identifier: "unit")
[unit registerValidationType:length_type];

// get validation status update
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("validationUnitStatusChange:"), name: ValidationUnitUpdateNotification, object: unit)

// listen for validation status updates    
@objc func validationUnitStatusChange(notification:NSNotification) {

    let unit:ValidationUnit = notification.object as ValidationUnit
    println("\(unit.identifier) is \(unit.valid)")

}

// validate the string 
unit.validateText("Velvet Underground")

该示例只使用了一个验证类型类,但您可以添加任意多个来创建非常复杂的验证测试。当然,高级用户可能想要利用ValidatorRegexType类,该类允许使用正则表达式作为验证测试。对于复杂的用例,这可能更可取——ValidatorEmailType内部使用正则表达式——但使用更基本的类型类可以提供更好的可读性。具体效果因用户而异。

验证静态字符串很酷,但让我们将ValidatorUnit连接到UITextField,以便在其文本变化时动态验证。虽然我们只用ValidationUnit也能完成这个任务,但使用ValidationManager会更方便。

let manager = ValidationManager()
let email_type:ValidatorEmailType = ValidatorEmailType()
manager.registerTextField(self.textField, validationTypes: [email_type], identifier: "email")

// register for validation status updates
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("validationManagerStatusChange:"), name: ValidationStatusNotification, object: manager)

// listen for manager's validation updates
@objc func validationManagerStatusChange(notification:NSNotification) {
  let user_info = notification.userInfo as Dictionary
  let is_valid = (user_info["status"] as NSNumber).boolValue as Bool

  if (!is_valid) {
    let all_errors:NSDictionary = user_info["errors"] as NSDictionary
    let email_dict:NSDictionary = all_errors[email_type.identifier] as NSDictionary
    let email_errors:NSDictionary = email_dict["errors"] as NSDictionary
  } 

}

致谢

PapersPlease由Brett Walker创建,他来自Poet & Mountain

兼容性

  • 需要iOS 7.0或更高版本,Xcode 6+

许可

PapersPlease遵循MIT许可证。