QuickObserver 2.0
快速为任何对象启用可观察的行为。
为什么我应该使用这个?
如果您正在寻找一种将应用程序的逻辑与前端解耦的方法,这将是一个很好的帮助。它允许类以轻量级耦合,并允许信息双向快速传递。无论是从视图控制器向上到逻辑控制器,还是从逻辑控制器向下到视图控制器,都可以轻松实现。这也允许多个相关视图控制器使用相同的逻辑控制器。
用法
使用观察者很容易,以下是一个示例观察对象。
import QuickObserver
class Controller: QuickObservable {
var observer = QuickObserver<Actions, Errors>()
enum Actions {
case action
}
enum Errors: Error {
case error
}
}
上述类 Controller 现在可以被观察,并执行类中描述的动作或错误。
报告变更
在任何需要通知观察对象有变化时,你只需在观察者实例上调用 report(action: Actions)
,就像下面这个示例一样。
extension Controller {
func performAnAction() {
// Some Logic
observer.report(.action)
}
}
一旦调用了 observer.report(.action)
,就会通知所有观察对象需要对这个变化做出反应。
添加观察者
有两种类型的观察者。一种是重试观察者,它会持续收到更新,直到可观察对象不存在或不再需要更新。第二种是一次性观察者,它只会收到一次更新并且之后就被移除。以下是如何使用上面的 Controller
类的示例。
重复观察者
下面是可以在收到更新时继续从 Controller
对象接收更新的视图控制器。在传递给可观察对象的闭包中,你会看到它返回传递进去的观察者的引用。在这个例子中,那就是视图控制器本身。《code>this 变量允许你在不需要担心引用保留的情况下访问 ViewController。
import UIKit
class ViewController: UIViewController {
var controller = Controller()
override func viewDidLoad() {
super.viewDidLoad()
controller.add(self) { (this, result) in
switch result {
case .success(let action): this.handle(action)
case .failure(let error): this.handle(error)
}
}
}
func handle(_ action: Controller.Actions) {
switch action {
case .action: break // Do Some Work Here
}
}
func handle(_ error: Controller.Errors) {
switch error {
case .error: break // Handle Error Here
}
}
}
单次观察者
下面是可以在收到单次更新后继续从 Controller
对象接收更新的视图控制器。在这种情况下,一旦调用闭包,闭包就会被释放,并且不会再次被调用。
class ViewController: UIViewController {
var controller = Controller()
override func viewDidLoad() {
super.viewDidLoad()
controller.add { [weak self] (result) in
switch result {
case .success(let action): self?.handle(action)
case .failure(let error): self?.handle(error)
}
}
}
func handle(_ action: Controller.Actions) {
switch action {
case .action: break // Do Some Work Here
}
}
func handle(_ error: Controller.Errors) {
switch error {
case .error: break // Handle Error Here
}
}
}
安装
CocoaPods
如果你已经有了 podfile,只需将 pod 'QuickObserver', '~> 2.0.0'
添加到其中,并运行 pod install。
如果你在项目中还没有设置 Cocoapods 需要帮助,请参考 使用 CocoaPods 指南。确保将 pod 'QuickObserver', '~> 2.0.0'
添加到新创建的 podfile 中。
手册
要手动安装文件,只需将 QuickObserver 目录中的所有内容复制到您的项目中。