CovertSwiftObserver 1.0.0

CovertSwiftObserver 1.0.0

Alexey Demin 维护。



  • 作者:
  • Alexey Demin

CovertSwiftObserver

Swift 实现 观察者模式,充分利用最新语言特性以保证类型和线程安全。该库通过对冗余服务对象的隐藏来简化通知的语法,并通过自动管理观察者退订来帮助避免保留周期,从而使 Swift 中的 响应式编程 变得比以往任何时候都要简单。

设置

Swift 包管理器 (推荐)

在 Xcode 11 或更高版本中打开您的应用程序项目,转到菜单 文件 -> Swift 包 -> 添加包依赖... 并粘贴包仓库 URL https://github.com/DnV1eX/CovertSwiftObserver.git

CocoaPods

将 pod 添加到您的 Podfile

pod 'CovertSwiftObserver', '~> 1.0'

或者直接指定 git 以获取确保的最新版本

pod 'CovertSwiftObserver', :git => 'https://github.com/DnV1eX/CovertSwiftObserver.git'

复制文件

或者,您可以手动将<本土化链接>CovertSwiftObserver.swift<本土化链接>复制到您的项目(不推荐)或Playground中。

现有更改传播技术概述

键值观察(KVO)

Cocoa的对象键观察技术。

  • 在Objective-C运行时级别实现,与纯Swift关联不大。

通知中心

曾经用于在整个应用程序中发送通知的有用类。

  • 使用单例实例;
  • 动态类型字典传递参数。

目标-动作

控件用来报告事件的一种机制。

  • 在AppKit / UIKit中实现;
  • 在iOS 14之前仅接受Objective-C的<本土化链接>Selectors<本土化链接>。

代理

基于弱对象引用并遵从预定义协议的模板,在UIKit中广泛使用。

  • 必须为每个代理定义一个协议;
  • 未设计为调用多个代理。

闭包

具有方便语法的功能块。

  • 存在创建保留周期的风险;
  • 需要手动管理多个闭包;
  • 用作回调可能会导致《末日金字塔》问题出现。

RxSwift / ReactiveSwift

全面实现函数响应式编程(FRP)

  • 引入了许多冗余实体;
  • 需要包装你的数据类型;
  • 复杂了程序逻辑的阅读,特别是对于该领域非专业人士;
  • 大多数情况下都是过度的。

Combine

苹果公司长期期待的FRP本地实现。

  • 仅从iOS 13起可用;
  • 足够强大,但也有一定的入门门槛。

其他

Swift 中有大量的(函数式)响应式编程库和框架。大部分都声称简单(甚至是最简单的),并提供了出色的多页文档。但是您要知道?您不需要任何文档就可以开始使用 CovertSwiftObserver😎

使用示例

class Drone {
    @ObservedUpdate var altitude: Double = 0 // Observe value update
}

class Camera {
    func refocus() { print("Camera refocused") }
}

class RemoteController {
    var displayedAltitude: Double = 0 {
        didSet { print("RC displayed altitude \(displayedAltitude)") }
    }
}

let drone = Drone()
let camera = Camera()
let rc = RemoteController()

drone.$altitude.onUpdate.run { print("Drone altitude \($0)") } // Run closure
drone.$altitude.onUpdate.call(camera, Camera.refocus) // Call function
drone.$altitude.onUpdate.bind(rc, \.displayedAltitude) // Bind property

drone.altitude = 10

// Drone altitude 10.0
// Camera refocused
// RC displayed altitude 10.0

待办

  • 文档高级用法和源代码;
  • 支持绑定可选和非可选的选项并提供默认值;
  • 消除在隐式解包未初始化的可选时崩溃的问题。

许可

版权 © 2018 DnV1eX。保留所有权利。根据Apache License,版本 2.0许可。