From ff25465d93100957e4046fe04619c4e572723020 Mon Sep 17 00:00:00 2001 From: Jeff Potter Date: Tue, 24 Mar 2015 13:43:33 -0600 Subject: [PATCH] Updating for swift 1.2 --- .../UserInterfaceState.xcuserstate | Bin 27068 -> 26958 bytes Validator/Base.lproj/Main.storyboard | 118 +++++++++--------- Validator/EmailRule.swift | 26 ++-- Validator/MinLengthRule.swift | 16 +-- Validator/PasswordRule.swift | 20 ++- Validator/ViewController.swift | 5 + Validator/ZipCodeRule.swift | 21 ++-- 7 files changed, 99 insertions(+), 107 deletions(-) diff --git a/Validator.xcodeproj/project.xcworkspace/xcuserdata/jpotts18.xcuserdatad/UserInterfaceState.xcuserstate b/Validator.xcodeproj/project.xcworkspace/xcuserdata/jpotts18.xcuserdatad/UserInterfaceState.xcuserstate index 1d5b4be59bbea6e62e6f2c883348f783fde50398..e34a8f0bd16df4fd89dd9b44eb43c4d050aeda7f 100644 GIT binary patch delta 13469 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 z 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 - + - + @@ -21,13 +21,13 @@ @@ -38,7 +38,7 @@ @@ -49,7 +49,7 @@ @@ -132,7 +132,7 @@ @@ -153,18 +153,18 @@ + + - - + + - - @@ -289,46 +289,46 @@ - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + - - - - - - - - + + @@ -354,46 +354,46 @@ - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + - - - - - - - - + + diff --git a/Validator/EmailRule.swift b/Validator/EmailRule.swift index a6eadcc..dbb9252 100644 --- a/Validator/EmailRule.swift +++ b/Validator/EmailRule.swift @@ -10,31 +10,25 @@ import Foundation class EmailRule: Rule { - let REGEX = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" + var REGEX : String - init(){} + init(){ + self.REGEX = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}" + } init(regex:String){ - self.REGEX = regex + REGEX = regex } - var message:String { - return "Must be a valid email address" - } - - func validate(value:String) -> Bool { - - if let emailTest = NSPredicate(format: "SELF MATCHES %@", REGEX) { - if emailTest.evaluateWithObject(value) { - return true - } else { - return false - } + func validate(value: String) -> Bool { + let test = NSPredicate(format: "SELF MATCHES %@", self.REGEX) + if test.evaluateWithObject(value) { + return true } return false } func errorMessage() -> String { - return self.message + return "Must be a valid email address" } } \ No newline at end of file diff --git a/Validator/MinLengthRule.swift b/Validator/MinLengthRule.swift index fcd63b3..accc858 100644 --- a/Validator/MinLengthRule.swift +++ b/Validator/MinLengthRule.swift @@ -11,22 +11,24 @@ import Foundation class MinLengthRule : Rule { - let DEFAULT_MIN_LENGTH:Int = 3 + private let DEFAULT_MIN_LENGTH: Int - init(){} + init(){ + DEFAULT_MIN_LENGTH = 3 + } init(length:Int){ self.DEFAULT_MIN_LENGTH = length } - func errorMessage() -> String { - return "Must be at least \(DEFAULT_MIN_LENGTH) characters long" - } - func validate(value: String) -> Bool { - if countElements(value) <= DEFAULT_MIN_LENGTH { + if count(value) <= DEFAULT_MIN_LENGTH { return false } return true } + + func errorMessage() -> String { + return "Must be at least \(DEFAULT_MIN_LENGTH) characters long" + } } \ No newline at end of file diff --git a/Validator/PasswordRule.swift b/Validator/PasswordRule.swift index 4bac284..5eb3b00 100644 --- a/Validator/PasswordRule.swift +++ b/Validator/PasswordRule.swift @@ -20,29 +20,25 @@ class PasswordRule : Rule { // 8 characters. one uppercase - var REGEX = "^(?=.*?[A-Z]).{8,}$" + private let REGEX: String - init(){} + init(){ + self.REGEX = "^(?=.*?[A-Z]).{8,}$" + } init(regex:String){ self.REGEX = regex } - var message:String { - return "Must be 8 characters with 1 uppercase" - } - func validate(value: String) -> Bool { - if let passwordTes = NSPredicate(format: "SELF MATCHES %@", REGEX) { - if passwordTes.evaluateWithObject(value) { - return true - } - return false + let test = NSPredicate(format: "SELF MATCHES %@", self.REGEX) + if test.evaluateWithObject(value) { + return true } return false } func errorMessage() -> String { - return self.message + return "Must be 8 characters with 1 uppercase" } } \ No newline at end of file diff --git a/Validator/ViewController.swift b/Validator/ViewController.swift index 84fc3cd..1868f0d 100644 --- a/Validator/ViewController.swift +++ b/Validator/ViewController.swift @@ -31,6 +31,7 @@ class ViewController: UIViewController , ValidationDelegate, UITextFieldDelegate override func viewDidLoad() { super.viewDidLoad() + self.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "hideKeyboard")) validator.registerField(fullNameTextField, errorLabel: fullNameErrorLabel , rules: [RequiredRule(), FullNameRule()]) validator.registerField(emailTextField, errorLabel: emailErrorLabel, rules: [RequiredRule(), EmailRule()]) @@ -96,6 +97,10 @@ class ViewController: UIViewController , ValidationDelegate, UITextFieldDelegate error.errorLabel?.hidden = true } } + + func hideKeyboard(){ + self.view.endEditing(true) + } } diff --git a/Validator/ZipCodeRule.swift b/Validator/ZipCodeRule.swift index fd2d279..4990483 100644 --- a/Validator/ZipCodeRule.swift +++ b/Validator/ZipCodeRule.swift @@ -9,30 +9,25 @@ import Foundation class ZipCodeRule: Rule { - let REGEX = "\\d{5}" + private let REGEX: String - - init(){} + init(){ + self.REGEX = "\\d{5}" + } init(regex:String){ self.REGEX = regex } - var message: String { - return "Enter a valid 5 digit zipcode" - } - func validate(value: String) -> Bool { - if let zipTest = NSPredicate(format: "SELF MATCHES %@", REGEX) { - if zipTest.evaluateWithObject(value) { - return true - } - return false + let test = NSPredicate(format: "SELF MATCHES %@", self.REGEX) + if test.evaluateWithObject(value) { + return true } return false } func errorMessage() -> String { - return message + return "Enter a valid 5 digit zipcode" } } \ No newline at end of file