SwiftCop 是一个用 Swift 写的验证库,它受启发于 Ruby On Rails Active Record validations.
SwiftCop 可以验证 Email、字符是否包含指定内容、长度验证等等。
例子效果:
上图例子代码:
class ViewController: UIViewController { @IBOutlet weak var validationLabel: UILabel! @IBOutlet weak var fullNameMessage: UILabel! @IBOutlet weak var emailMessage: UILabel! @IBOutlet weak var passwordMessage: UILabel! @IBOutlet weak var fullName: UITextField! @IBOutlet weak var emailTextField: UITextField! @IBOutlet weak var password: UITextField! // Let's create a cop! let swiftCop = SwiftCop() override func viewDidLoad() { super.viewDidLoad() //Let's add all the suspects swiftCop.addSuspect(Suspect(view: self.fullName, sentence: "More Than Two Words Needed"){ return $0.componentsSeparatedByString(" ").filter{$0 != ""}.count >= 2 }) swiftCop.addSuspect(Suspect(view:self.emailTextField, sentence: "Invalid email", trial: Trial.Email)) swiftCop.addSuspect(Suspect(view:self.password, sentence: "Minimum 4 Characters", trial: Trial.Length(.Minimum, 4))) } @IBAction func validateFullName(sender: UITextField) { self.fullNameMessage.text = swiftCop.isGuilty(sender)?.verdict() } @IBAction func validateEmail(sender: UITextField) { self.emailMessage.text = swiftCop.isGuilty(sender)?.verdict() } @IBAction func validatePassword(sender: UITextField) { self.passwordMessage.text = swiftCop.isGuilty(sender)?.verdict() } @IBAction func allValid(sender: UITextField) { let nonGultiesMessage = "Everything fine!" let allGuiltiesMessage = swiftCop.allGuilties().map{ return $0.sentence}.joinWithSeparator("\n") self.validationLabel.text = allGuiltiesMessage.characters.count > 0 ? allGuiltiesMessage : nonGultiesMessage } @IBAction func hideKeyboard(sender: AnyObject) { self.view.endEditing(true) } }
示例代码:
//Exclusion([String]) //This validates that the attributes are not included in the evidence string. let exclusionTrial = Trial.Exclusion([".com",".ar", ".uy"]) let trial = exclusionTrial.trial() XCTAssertFalse(trial(evidence: "http://www.nytimes.com")) //Format(String) //This validates whether the evidence matches a given regular expression. let formatTrial = Trial.Format("^#([a-f0-9]{6}|[a-f0-9]{3})$") // hexa number with # let trial = formatTrial.trial() XCTAssertTrue(trial(evidence: "#57b5b5")) //Inclusion([String]) //This validates that the attributes are included in the evidence string. let inclusionTrial = Trial.Inclusion([".com",".ar", ".uy"]) let trial = inclusionTrial.trial() XCTAssertTrue(trial(evidence: "http://www.nytimes.com")) //Email //This validates whether the evidence is an email or not. let emailTrial = Trial.Email let trial = emailTrial.trial() XCTAssertTrue(trial(evidence: "test@test.com")) //Length(Length,Any) //This validates the length of given evidence: let lengthTrial = Trial.Length(.Is, 10) let trial = lengthTrial.trial() XCTAssertTrue(trial(evidence: "0123456789")) let lengthTrial = Trial.Length(.Minimum, 10) let trial = lengthTrial.trial() XCTAssertTrue(trial(evidence: "0123456789")) let lengthTrial = Trial.Length(.Maximum, 10) let trial = lengthTrial.trial() XCTAssertTrue(trial(evidence: "0123456789")) let interval = Trial.Length(.In, 2..<5 as HalfOpenInterval) let trial = interval.trial() XCTAssertTrue(trial(evidence: "1234")) let interval = Trial.Length(.In, 2...5 as ClosedInterval) let trial = interval.trial() XCTAssertFalse(trial(evidence: "123456"))