Swift - 如何将 SwiftValidator 集成到我的项目中

Posted

技术标签:

【中文标题】Swift - 如何将 SwiftValidator 集成到我的项目中【英文标题】:Swift - How to use integrate SwiftValidator into my project 【发布时间】:2015-08-23 23:38:49 【问题描述】:

我有一个登录表单,它采用 2 种替代表单,具体取决于用户如何点击分段控件 .... 作为带有电子邮件、密码和重复密码的注册表单;或作为仅包含电子邮件和密码的登录表单。

当用户填写注册或登录字段并点击注册/登录按钮时...我使用代码登录用户...

    @IBAction func loginRegisterTapped(sender: AnyObject) 
       //check whether the sender tag is registerTag (in which case a new user is registering or alternately returning user logging in 
       //do various checks and if all good submit the form

我最近将一个验证库 (SwiftValidator) 复制到我的项目中,并将其配置为在点击登录/注册按钮时也验证字段,即我在 loginRegisterTapped ibaction 方法中将验证代码插入到我自己的代码上方。我集成 SwiftValidator 后的代码基本上变成了

@IBAction func loginRegisterTapped(sender: AnyObject) 
       //validation
    self.clearErrors()
    validator.validate(self)
       //check whether the sender tag is registerTag (in which case a new user is registering or alternately returning user logging in 
       //do various checks and if all good submit the form

SwiftValidator 库结束我们在验证成功或失败时调用 2 个委托方法(在我的 LoginViewController 中),如下所示

    // SwiftValidator library Delegate methods
func validationSuccessful() 
    // submit the form

func validationFailed(errors:[UITextField:ValidationError]) 
    // turn the fields to red
    for (field, error) in validator.errors 
        field.layer.borderColor = UIColor.redColor().CGColor
        field.layer.borderWidth = 1.0
        error.errorLabel?.text = error.errorMessage // works if you added labels
        error.errorLabel?.hidden = false
    

如果验证成功,我怎样才能让代码返回到我的@IBAction func loginRegisterTapped(sender: AnyObject) 方法并继续我自己的表单提交代码(...我需要对发件人的引用来检查它的标签确定该按钮是作为“注册”按钮还是“登录”按钮被点击),而不是按照 SwiftValidator 库在其validationSuccessful委托方法中的建议进行表单提交,其中我无权访问发件人变量。即我在这里有什么选择或者什么被认为是最佳实践? ...我想自定义validationSuccessful 方法以将布尔值返回给调用函数,但怀疑这是否是最好的方法?

【问题讨论】:

【参考方案1】:

恕我直言,我会在validationSuccessful() 方法中成功提交表单,而不是在您自己的操作方法中。我会避免使用标签来区分登录和注册按钮,而是让每个按钮调用一个单独的操作方法。通过使用相同的处理程序处理它们,您不会节省任何时间、代码或逻辑清晰度。

【讨论】:

谢谢。我更改了代码以反映您的建议并且似乎正在工作。我正在标记登录按钮以确定与登录相比它是否是注册但我将其更改为不同的按钮并且我隐藏或显示按钮取决于用户是注册还是登录。我将表单提交逻辑转移到validationSuccessful() 方法,在其中我仍然需要某种方法来检查它是注册还是登录......我通过查询验证器本身来验证它正在验证的字段数(3 是注册,2 是登录)和我的代码正确提交。

以上是关于Swift - 如何将 SwiftValidator 集成到我的项目中的主要内容,如果未能解决你的问题,请参考以下文章

如何将以下代码从 Swift 2 转换为 Swift 5?

Swift:如何将字符串放入 \()? [复制]

Swift:如何将 MapView 放入 UIView(?)

如何在 Swift 中从 NSData 显示 PDF - 如何将 PDF 保存到文档文件夹 Swift - 如何在 Swift 中通过 WebView 从保存的 NSData 显示 PDF

如何将此 NSClassFromString 代码转换为 Swift?

如何将代码 AVFoundation 目标 c 转换为 Swift?