ValidationsKit 1.1.0

ValidationsKit 1.1.0

Émilie Legent 维护。



ValidationsKit

此套件的目标是将 vapor/validation 包引入 iOS,通过从中删除 Vapor 核心依赖来实现。

示例

将尝试将验证添加到 User 模型,以便满足例如注册过程的要求。
首先,我们要像往常一样描述它。

struct User {
    let mail: String
    let phone: String
    let password: String
    let website: String?
    let twitter: String?
}

然后,我们必须通过添加 validations() 函数使该模型符合 Validatable 协议。这返回一个用于我们模型的 Validations 对象,并允许我们向它添加 Validator
与 Vapor 包一样,已经有一些您可以使用 Validator(如 mailcountempty ...)或者您可以通过闭包定义您自己的验证规则

extension User: Validatable {

    static func validations() throws -> Validations<User> {
        var validations = Validations(User.self)

        // 'mail' should be a valid mail address.
        validations.add(\.mail, ["mail"], .mail)

        // 'phone' should be a valid phone number.
        validations.add(\.phone, ["phone"], .phone) 

        // 'password' should have more than 8 characters.
        validations.add(\.password, ["password"], .count(8...))

        // 'website' should be nil or be a valid url.
        validations.add(\.website, ["website"], .nil || .url)

        // 'twitter' should be nil or began by '@'.
        validations.add(\.twitter, at: ["twitter"]) { twitter in
        	guard let twitter = twitter else { return }
            guard twitter.first != "@" else { return }
            throw BasicValidationError("isn't a valid Twitter username")
        }
        return validations
    }

}

现在我们已经设置好了模型,我们可以调用它的 validate() 方法。

let valid = User(mail: "[email protected]", phone: "++3642424242", password: "somepassword", website: nil, twitter: nil)
do { try valid.validate() }
catch {
	// Will never be executed because our model is valid.
}

let invalidWebsite = User(mail: "[email protected]", phone: "++3642424242", password: "somepassword", website: "notValidUrl", twitter: nil)
do { try invalidWebsite.validate() }
catch {
	print("\(error)") // 'website' isn't nil or isn't a valid url.
}

或者您可以从指定的 keyPath 验证单个字段

try valid.validate(at: \User.mail)

您还可以查看 ValidationsKitDemo 目录中的演示应用程序,使用 Cocoapods 工具。

安装

Cocoapods

只需在您的pods依赖中添加这一行

pod 'ValidationsKit', '~> 1.1'

Swift Package Manager

在您的 Package.swift 中添加GitHub链接作为依赖项

.package(url: "https://github.com/amoriarty/ValidationsKit", from: "1.1.0"),

将依赖项添加到您的目标中

.target(name: "your_target_name", dependencies: ["ValidationsKit"]),

然后使用以下命令更新您的项目:

$ swift package update

与Vapor package的区别

与Vapor package的主要区别在于它不包括Reflectable系统,这允许您的模型同时符合DecodableReflectable,以避免在出现错误时输入键路径,如果变量今后被重命名,这种方法可能会导致错误。

感谢

我要非常感谢Vapor社区,感谢他们的所有工作和出色的软件包,这真的是我要带入iOS的一个典范。