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许可。