From 76a76564797d5e24dadaf42456a03ae284e9a120 Mon Sep 17 00:00:00 2001 From: Maarten Lauwers Date: Sun, 20 Dec 2015 14:43:46 +0100 Subject: [PATCH 1/2] Updated the ValidationDelegate to return the successfully validated text fields --- SwiftValidator/Core/Validator.swift | 8 ++++++-- Validator/ViewController.swift | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) mode change 100644 => 100755 SwiftValidator/Core/Validator.swift diff --git a/SwiftValidator/Core/Validator.swift b/SwiftValidator/Core/Validator.swift old mode 100644 new mode 100755 index f9b806c..983df9d --- a/SwiftValidator/Core/Validator.swift +++ b/SwiftValidator/Core/Validator.swift @@ -10,13 +10,14 @@ import Foundation import UIKit @objc public protocol ValidationDelegate { - func validationSuccessful() + func validationSuccessful(validFields: [UITextField]) func validationFailed(errors: [UITextField:ValidationError]) } public class Validator { // dictionary to handle complex view hierarchies like dynamic tableview cells public var errors = [UITextField:ValidationError]() + public var validFields = [UITextField]() public var validations = [UITextField:ValidationRule]() private var successStyleTransform:((validationRule:ValidationRule)->Void)? private var errorStyleTransform:((validationError:ValidationError)->Void)? @@ -28,6 +29,7 @@ public class Validator { private func validateAllFields() { errors = [:] + validFields = [] for (textField, rule) in validations { if let error = rule.validateField() { @@ -39,6 +41,8 @@ public class Validator { } } else { // No error + validFields.append(textField) + // let the user transform the field if they want if let transform = self.successStyleTransform { transform(validationRule: rule) @@ -72,7 +76,7 @@ public class Validator { self.validateAllFields() if errors.isEmpty { - delegate.validationSuccessful() + delegate.validationSuccessful(validFields) } else { delegate.validationFailed(errors) } diff --git a/Validator/ViewController.swift b/Validator/ViewController.swift index 6d37f64..9363698 100644 --- a/Validator/ViewController.swift +++ b/Validator/ViewController.swift @@ -63,7 +63,7 @@ class ViewController: UIViewController , ValidationDelegate, UITextFieldDelegate // MARK: ValidationDelegate Methods - func validationSuccessful() { + func validationSuccessful(validFields: [UITextField]) { print("Validation Success!") let alert = UIAlertController(title: "Success", message: "You are validated!", preferredStyle: UIAlertControllerStyle.Alert) let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil) From 2cf2388f151fd2d287c3f42537a5029ff0bc0686 Mon Sep 17 00:00:00 2001 From: Maarten Lauwers Date: Sun, 20 Dec 2015 16:08:42 +0100 Subject: [PATCH 2/2] The valid fields are now sent with the validationFailed delegate method because the validationSuccessful is of course only called when all fields are successful --- SwiftValidator/Core/Validator.swift | 8 ++++---- Validator/ViewController.swift | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/SwiftValidator/Core/Validator.swift b/SwiftValidator/Core/Validator.swift index 983df9d..6f5a6d5 100755 --- a/SwiftValidator/Core/Validator.swift +++ b/SwiftValidator/Core/Validator.swift @@ -10,8 +10,8 @@ import Foundation import UIKit @objc public protocol ValidationDelegate { - func validationSuccessful(validFields: [UITextField]) - func validationFailed(errors: [UITextField:ValidationError]) + func validationSuccessful() + func validationFailed(errors: [UITextField:ValidationError], validFields: [UITextField]) } public class Validator { @@ -76,9 +76,9 @@ public class Validator { self.validateAllFields() if errors.isEmpty { - delegate.validationSuccessful(validFields) + delegate.validationSuccessful() } else { - delegate.validationFailed(errors) + delegate.validationFailed(errors, validFields: validFields) } } diff --git a/Validator/ViewController.swift b/Validator/ViewController.swift index 9363698..0bafdaf 100644 --- a/Validator/ViewController.swift +++ b/Validator/ViewController.swift @@ -63,7 +63,7 @@ class ViewController: UIViewController , ValidationDelegate, UITextFieldDelegate // MARK: ValidationDelegate Methods - func validationSuccessful(validFields: [UITextField]) { + func validationSuccessful() { print("Validation Success!") let alert = UIAlertController(title: "Success", message: "You are validated!", preferredStyle: UIAlertControllerStyle.Alert) let defaultAction = UIAlertAction(title: "OK", style: .Default, handler: nil) @@ -71,7 +71,7 @@ class ViewController: UIViewController , ValidationDelegate, UITextFieldDelegate self.presentViewController(alert, animated: true, completion: nil) } - func validationFailed(errors:[UITextField:ValidationError]) { + func validationFailed(errors:[UITextField:ValidationError], validFields: [UITextField]) { print("Validation FAILED!") }