SwiftCop 1.1.0

SwiftCop 1.1.0

测试已验证
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2017年10月
SwiftSwift 版本4.0
SPM支持 SPM

Andres Canal 维护。




SwiftCop 1.1.0

SwiftCop 是一个完全用 Swift 编写的验证库,其灵感来自于 Ruby On Rails Active Record 验证的清晰性。

目标

为 Swift 中的验证构建一个标准的、易于扩展的库,以便用户可以轻松创建自定义验证。同时避免开发者反复为不同项目编写相同的代码和验证。

功能

  • 快速验证。
  • 非常简单和声明性语法。
  • 易于扩展。
  • 完全支持 Swift 4.0

模块

SwiftCop 依据三个不同的概念构建

Trial

Trial 是一个实现 TrialProtocolEnum

public protocol TrialProtocol {
	func trial() -> ((_ evidence: String) -> Bool)
}

我们可以使用 Trial 来快速验证 strings。SwiftCop 提供了非常完整的 Trial 实现。以下提供了一些 trials

Exclusion([String])

此功能验证属性是否不在证据字符串中。

let exclusionTrial = Trial.exclusion([".com",".ar", ".uy"])
let trial = exclusionTrial.trial()

XCTAssertFalse(trial("http://www.nytimes.com"))
XCTAssertFalse(trial("http://www.lanacion.com.ar"))
XCTAssertTrue(trial("http://www.elpais.es"))

Format(String)

此功能验证证据是否与给定的正则表达式匹配。

let formatTrial = Trial.format("^#([a-f0-9]{6}|[a-f0-9]{3})$") // hexa number with #
let trial = formatTrial.trial()
	
XCTAssertTrue(trial("#57b5b5"))
XCTAssertFalse(trial("57b5b5"))
XCTAssertFalse(trial("#h7b5b5"))

Inclusion([String])

此功能验证属性是否在证据字符串中。

let inclusionTrial = Trial.inclusion([".com",".ar", ".uy"])
let trial = inclusionTrial.trial()
	
XCTAssertTrue(trial("http://www.nytimes.com"))
XCTAssertTrue(trial("http://www.lanacion.com.ar"))
XCTAssertFalse(trial("http://www.elpais.es"))

Email

此功能验证证据是否为邮箱地址。

let emailTrial = Trial.email
let trial = emailTrial.trial()
XCTAssertTrue(trial("[email protected]"))

Length(Length,Any)

此功能验证给定证据的长度。

let lengthTrial = Trial.Length(.Is, 10)
let trial = lengthTrial.trial()
XCTAssertTrue(trial("0123456789"))
let lengthTrial = Trial.Length(.Minimum, 10)
let trial = lengthTrial.trial()
XCTAssertTrue(trial("0123456789"))
let lengthTrial = Trial.Length(.Maximum, 10)
let trial = lengthTrial.trial()		
XCTAssertTrue(trial("0123456789"))
let interval = Trial.Length(.In, 2..<5 as HalfOpenInterval)
let trial = interval.trial()
XCTAssertTrue(trial("1234"))
let interval = Trial.Length(.In, 2...5 as ClosedInterval)
let trial = interval.trial()
XCTAssertFalse(trial("123456"))

Suspect

Suspect 是一个 Struct,它是其他在验证字段时始终使用的概念的粘合剂。它将 UITextField 与证据源、如果 Suspect 有罪(当 Trial 返回 false 时)将显示的句子以及 Trial 本身结合在一起,该 Trial 可以是针对嫌疑人的自定义 made trial,或者您可以使用库中提供的 trials 之一

Suspect(view: UITextField, sentence: String, trial: TrialProtocol)
Suspect(view: UITextField, sentence: String, trial: (String) -> Bool)

我们可以使用以下方法来检查 Suspect 是否有罪

func isGuilty() -> Bool

如果 Trial 返回 false,则此方法将返回 true

我们还可以直接要求 Suspectverdict,这将检查是否有罪,然后返回空字符串("")或句子。

例如

let suspect = Suspect(view: self.dummyTextField, sentence: "Invalid email", trial: .Email)		
let verdict = suspect.verdict() // this can be "" or "Invalid Email"

SwiftCop

最后,我们将有一个人来执行验证!警察将收集所有嫌疑人,并给我们提供检查哪些嫌疑人有罪或是否有任何有罪嫌疑人的工具。

正如您所想,这将使警察对一名嫌疑人进行监控,我们可以添加任意多的嫌疑人

open func addSuspect(_ suspect: Suspect)

这允许我们检查在我们的警察监控下的所有嫌疑人中是否有任何有罪的嫌疑人

public func anyGuilty() -> Bool

这将使我们了解警察找到的所有有罪嫌疑人

public func allGuilties() -> Array<Suspect>

这允许我们检查一个被怀疑的用户界面字段是否是有罪的

public func isGuilty(textField: UITextField) -> Suspect?

示例

示例已在存储库中提供

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 swiftCop = SwiftCop()
	
	override func viewDidLoad() {
		super.viewDidLoad()
		
		swiftCop.addSuspect(Suspect(view: self.fullName, sentence: "More Than Two Words Needed"){
			return $0.components(separatedBy: " ").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}.joined(separator: "\n")
		
		self.validationLabel.text = allGuiltiesMessage.characters.count > 0 ? allGuiltiesMessage : nonGultiesMessage
	}
	
	@IBAction func hideKeyboard(_ sender: AnyObject) {
		self.view.endEditing(true)
	}
}

SwiftCopExampel

安装

您可以直接克隆存储库并将 SwiftCop 文件夹复制到您的项目中,或者您可以选择以下任一选项