QuickObserver 2.1.1

QuickObserver 2.1.1

Timothy Rascher 维护。



  • Timothy Rascher

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 目录中的所有内容复制到您的项目中。