Quiver 1.2.0

Quiver 1.2.0

测试已测试
语言编程语言 SwiftSwift
许可证 MIT
发布上次发布2019年4月
SPM支持 SPM

HeyThor 维护。



Quiver 1.2.0

  • 作者
  • HeyThor

Quiver

license Swift 5 Xcode 10.2 CocoaPods Compatible Carthage compatible Build Status codecov codebeat badge

Quiver 是一个库,提供了一种验证、搜索和过滤对象的简单方法。

安装

CocoaPods

pod 'Quiver', '~> 1.2'

Carthage

github "heitorgcosta/Quiver" ~> 1.2  

用法

验证

可以通过实现 Validatable 协议来轻松验证对象。为此,必须实现 validations(with:)。映射使用 Swift 4 的新智能键路径。

struct Person {
    var name: String?
    var age: Int?
}

extension Person: Validatable {
    func validations(with mapper: ValidatorMapper) {
        // Name is required and must be at least 4 characters long.
        mapper[\Person.name] = [.required(),
                                .length(min: 4)]

        // Age is required and must be 18 or over
        mapper[\Person.age] = [.required(),
                               .greaterOrEqual(to: 18)]
    }
}

任何实现 Validatable 的对象都可以调用 validate(),这将返回一个结果对象。

let person = Person(name: "Hector", age: 23)
let result = person.validate()

print(result.success) // Prints 'true'

结果还包括发生的错误。

let person = Person(name: "Hector", age: nil) 
let result = person.validate()

print(result.success) // Prints 'false'
print(result.error.items.count) // Prints 1, since it does not fulfill the 'required' validation

此外,每个验证器可以包含您定义的自定义消息。

extension Person: Validatable {
    func validations(with mapper: ValidatorMapper) {
        mapper[\Person.name] = [.required(message: "The name is required"),
                                .length(min: 4, message: "The name should be at least 4 characters long")]

        mapper[\Person.age] = [.required(message: "The age is required"),
                               .greaterOrEqual(to: 18, message: "The age should be 18 or over")]
    }
}

let person = Person(name: "Heitor", age: 17)
let result = person.validate()

print(result.error.firstItem?.message ?? "No errors found") // Will print 'The age should be 18 or over'

验证器仍处于起步阶段,未来还将添加更多。

搜索

首先,要搜索的对象必须实现 Searchable 协议。函数 searchableFields() 应返回所有可搜索属性。

struct Person {
    var name: String
    var age: Int
}

extension Person: Searchable {
    func searchableFields() -> [Any?] {
        return [name, age]
    }
}

然后,任何此类对象的数组都可以使用 search() 函数获取匹配结果的数组。

// If any searchable field of a person contains "John", it is returned in the result array.

let results = personsArray.search(with: "John") // Search is not case sensitive by default.
let caseSensitiveResults = personsArray.search(with: "John", caseSensitive: true) // Explicit case sensitivity

过滤

可以使用本库中包含的验证器通过使用 filter(by:with:) 对象数组进行过滤,使用键路径和验证器数组。

let persons: [Person] = [] // Just imagine a great collection of persons
let filtered = persons.filter(by: \Person.name, with: [.length(min: 4)]) // Filter persons that contains name with length of at least 4 characters

许可

Quiver 在 MIT 许可证 下发布。