GrayCore 0.1.2

GrayCore 0.1.2

Gray Company 维护。



GrayCore 0.1.2

  • 作者
  • admin-graycompany

GrayCore

CI Status Version License Platform

安装

GrayCore 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中即可

pod 'GrayCore'

用法

CustomError

这是一个非常简单但很有用的 errors,其中包含一个字符串。

let error: Error = CustomError(message: "Error description")
print(error.localizedDescription)

Formatter

Formatter 是一个类,包含用于格式化数据的静态方法。

电话

电话格式化程序将获取一个字符串,移除所有非数字字符并返回格式化后的结果。

var result = Formatter.format(phone: "11988887777")
print(result) // "(11) 98888-7777"

result = Formatter.format(
	phone: "551188887777", 
	addPlusSign: true, 
	countryCodeDigits: 2, 
	areaCodeDigits: 2,
	leftDigits: 4,
	rightDigits: 4
)
print(result) // "+55 (11) 8888-7777"

路由器

路由器可以从Storyboard文件中实例化初始视图控制器。因为它使用泛型,所以会尝试将其转换为告知的类类型。

let router = Router()
let path = RouterPath(rawValue: "Scene")
let destination: SceneViewController? = router.destination(for: path)

RouterPath是具有Storyboard名称的组件,可以轻松扩展以获得更好的代码。

extension RouterPath {
	public static var Scene: RouterPath {
		return RouterPath(rawValue: "Scene")
	}
}

let router = Router()
let destination: SceneViewController? = router.destination(for: .Scene)

验证器

验证器是一个具有静态方法的类,用于验证数据。

电子邮件

let result = Validator.isValid(email: "[email protected]")
print(result) // true

电话

var result = Validator.isValid(phone: "(11) 98888-7777")
print(result) // true

result = Validator.isValid(
	phone: "+55 (11) 8888-7777",
	formatted: true,
	internationalNumber: true,
	areaCodeRange: "2",
	leftRange: "4,5",
	rightRange: "4"
)
print(result) // true

ViewModel

ViewModel类被设计得简单但非常灵活和强大。它只有3个方法

  • bind(_ 监听器: @escaping (T?) -> Void)
  • set(data: T?)
  • update(block: (T?) -> T?)

绑定

使用绑定设置一个闭包,每次在ViewModel上设置新数据时都会执行。它将以数据本身作为参数进行调用。

设置

此功能用于替换ViewModel上的当前数据。更新属性后,它将触发绑定方法。

更新

如果你想仅更改几个属性而不是整个对象,可以调用更新函数,并返回一个包含数据作为参数的闭包。使用它后,你只需更改所需的内容,然后ViewModel将触发绑定方法。

示例

import UIKit
import GrayCore

class Counter {
	var title: String
	var currentValue: Int
	init(title: String, currentValue: Int) {
		self.title = title
		self.currentValue = currentValue
	}
}

class ViewController: UIViewController {

	var viewModel: ViewModel<Counter> = ViewModel()
	
	@IBOutlet private weak var titleLabel: UILabel!
	@IBOutlet private weak var currentValueLabel: UILabel!
	
	override func viewDidLoad() {
		super.viewDidLoad()
		viewModel.bind { counter in
			self.updateUI(counter: counter)
		}
		updateUI(counter: nil)
	}
	
	func updateUI(counter: Counter?) {
		let empty = "-"
		titleLabel.text = counter?.title ?? empty
		var value = empty
		if let currentValue = counter?.currentValue {
			value = "\(currentValue)"
		}
		currentValueLabel.text = value
	}
	
	@IBAction private func resetButtonTouchUpInside(_ sender: UIButton) {
		viewModel.set(data: Counter(title: "Counter", currentValue: 0))
	}
	
	@IBAction private func incrementButtonTouchUpInside(_ sender: UIButton) {
		viewModel.update { counter in
			counter?.currentValue += 1
		}
	}
	
	@IBAction private func decrementButtonTouchUpInside(_ sender: UIButton) {
		viewModel.update { counter in
			counter?.currentValue -= 1
		}
	}
}

作者

Gray Company [email protected]

许可协议

GrayCore 在MIT许可下可用。更多信息请参见LICENSE文件。