测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2017年3月 |
SwiftSwift版本 | 3.0 |
SPM支持SPM | ✗ |
由FrogRain维护。
FluidValidator旨在封装验证逻辑。API设计时参考了FluentValidation (https://github.com/JeremySkinner/FluentValidation) 和Rails Validation。目前支持简单对象、复杂对象(对象图)、可枚举对象的验证。支持本地化错误消息。您可以轻松地覆盖基本行为和/或构建自己的可重用验证规则。
要运行示例项目,请克隆仓库,然后首先从Example目录运行pod install
命令。
没有特殊要求
您可以通过CocoaPods获取FluidValidator。要安装它,只需将以下行添加到您的Podfile中
pod "FluidValidator"
给定此对象
import Foundation
class Home {
var isLocked:Bool?
var number:Int?
var ownerName:String?
}
创建一个扩展AbstractValidator的自定义验证器,指定目标类Example
import Foundation
import FluidValidator
class HomeValidator : AbstractValidator<Home> {
override init() {
super.init()
self.addValidation(withName: "number") { (context) -> (Any?) in
context.number
}.addRule(GreaterThan(limit: 3, includeLimit: false))
self.addValidation(withName: "ownerName") { (context) -> (Any?) in
context.ownerName
}.addRule(BeNotEmpty())
self.addValidation(withName: "isLocked") { (context) -> (Any?) in
context.isLocked
}.addRule(BeTrue())
}
}
给定一个更复杂的对象
import Foundation
class Home {
var isLocked:Bool?
var number:Int?
var ownerName:String?
var garage: Garage?
}
class Garage {
var isOpen: Bool?
var maxCars: Int?
}
相应的验证器将按此方式实现
import Foundation
import FluidValidator
class GarageValidator: AbstractValidator<Garage> {
override init() {
super.init()
self.addValidation(withName: "isOpen") { (context) -> Any? in
context.isOpen
}.addRule(BeTrue())
self.addValidation(withName: "maxCars") { (context) -> Any? in
context.maxCars
}.addRule(LessThan(limit: 2, includeLimit: true))
}
}
class HomeValidator : AbstractValidator<Home> {
override init() {
super.init()
...
self.addValidation(withName: "garage") { (context) -> (Any?) in
context.garage
}.addRule(GarageValidator())
}
}
无论您的验证器多么复杂,您都可以运行验证过程并提取错误消息(如果有的话),如下所示
let garage = Garage()
garage.isOpen = false
let home = Home()
home.isLocked = true
home.ownerName = "John Doe"
home.number = 2
home.garage = garage
let homeValidator = HomeValidator()
let result = homeValidator.validate(home)
let failMessage = homeValidator.allErrors()
failMessage.failMessageForPath("number")?.errors.first?.compact
failMessage.failMessageForPath("number")?.errors.first?.extended
failMessage.failMessageForPath("garage")?.errors.first?.compact
failMessage.failMessageForPath("garage.isOpen")?.errors.first?.extended
错误数组包含ErrorMessage对象,后者又包含简短和扩展的错误消息。
查看单元测试类以了解其他功能
FluidValidator可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。