SwiftValidator
  • March 8, 2024

Swift Validator is a rule-based validation library for Swift.

Core Concepts


  • UITextField + [Rule] + (and optional error UILabel) go into Validator
  • UITextField + ValidationError come out of Validator
  • Validator evaluates [Rule] sequentially and stops evaluating when a Rule fails.

Installation


 

# Podfile
source ‘https://github.com/CocoaPods/Specs.git’
platform :ios, “8.1”

use_frameworks!

# Swift 4.2
pod ‘SwiftValidator’, :git => ‘https://github.com/jpotts18/SwiftValidator.git’, :tag => ‘4.2.0’

# Swift 3
# Extended beyond UITextField
pod ‘SwiftValidator’, :git => ‘https://github.com/jpotts18/SwiftValidator.git’, :branch => ‘master’

# Swift 2.1
# Extended beyond UITextField
# Note: Installing 4.x.x will break code from 3.x.x
pod ‘SwiftValidator’, :git => ‘https://github.com/jpotts18/SwiftValidator.git’, :tag => ‘4.0.0’

# Swift 2.1 (limited to UITextField validation)
pod ‘SwiftValidator’, :git => ‘https://github.com/jpotts18/SwiftValidator.git’, :tag => ‘3.0.5’

Install into your project:

$ pod install

Open your project in Xcode from the .xcworkspace file (not the usual project file):

$ open MyProject.xcworkspace

If you are using Carthage you will need to add this to your Cartfile

github “jpotts18/SwiftValidator”

Usage


You can now import SwiftValidator framework into your files.

Initialize the Validator by setting a delegate to a View Controller or other object.

// ViewController.swift
let validator = Validator()

Register the fields that you want to validate

override func viewDidLoad() {
super.viewDidLoad()
// Validation Rules are evaluated from left to right.
validator.registerField(fullNameTextField, rules: [RequiredRule(), FullNameRule()])
// You can pass in error labels with your rules
// You can pass in custom error messages to regex rules (such as ZipCodeRule and EmailRule)
validator.registerField(emailTextField, errorLabel: emailErrorLabel, rules: [RequiredRule(), EmailRule(message: “Invalid email”)])
// You can validate against other fields using ConfirmRule
validator.registerField(emailConfirmTextField, errorLabel: emailConfirmErrorLabel, rules: [ConfirmationRule(confirmField: emailTextField)])
// You can now pass in regex and length parameters through overloaded contructors
validator.registerField(phoneNumberTextField, errorLabel: phoneNumberErrorLabel, rules: [RequiredRule(), MinLengthRule(length: 9)])
validator.registerField(zipcodeTextField, errorLabel: zipcodeErrorLabel, rules: [RequiredRule(), ZipCodeRule(regex : “\\d{5}”)])
// You can unregister a text field if you no longer want to validate it
validator.unregisterField(fullNameTextField)
}

Validate Fields on button tap or however you would like to trigger it.

@IBAction func signupTapped(sender: AnyObject) {
validator.validate(self)
}

Implement the Validation Delegate in your View controller

// ValidationDelegate methods
func validationSuccessful() {
// submit the form
}
func validationFailed(_ errors:[(Validatable ,ValidationError)]) {
  // turn the fields to red
  for (field, error) in errors {
    if let field = field as? UITextField {
      field.layer.borderColor = UIColor.red.cgColor
      field.layer.borderWidth = 1.0
    }
    error.errorLabel?.text = error.errorMessage // works if you added labels
    error.errorLabel?.isHidden = false
  }
}

Single Field Validation


You may use single field validation in some cases. This could be useful in situations such as controlling responders:

// Don’t forget to use UITextFieldDelegate
// and delegate yourTextField to self in viewDidLoad()
func textFieldShouldReturn(textField: UITextField) -> Bool {
validator.validateField(textField){ error in
if error == nil {
// Field validation was successful
} else {
// Validation error occurred
}
}
return true
}

Custom Validation


We will create a SSNRule class to show how to create your own Validation. A United States Social Security Number (or SSN) is a field that consists of XXX-XX-XXXX.

Create a class that inherits from RegexRule

class SSNVRule: RegexRule {
    static let regex = “^\\d{3}-\\d{2}-\\d{4}$”
    convenience init(message : String = “Not a valid SSN”){
self.init(regex: SSNVRule.regex, message : message)
    }
}

GitHub


View Github

#ios #keyboard #swift #text
YOU MIGHT ALSO LIKE...
EEStackLayout

A vertical stackview which takes subviews with different widths and adds them to it's rows with paddings, spacings etc.

AudioManager

AudioManager is a Swift package that provides a modular and easy-to-use interface for implementing audio feedback in your applications. It ...

CameraBackground

Features Both front and back camera supported. Flash modes: auto, on, off. Countdown timer. Tap to focus. Pinch to zoom. Usage  

DKCamera

Description A light weight & simple & easy camera for iOS by Swift. It uses CoreMotion framework to detect device orientation, so ...