Agnes
Saturation
简单要求如下
在 MVVM 与 RxSwift 中,我们可能会遇到以下情况:
如果我们能在 ControllerB 中使用 viewModelA 的实例,那将非常出色!但是,由于我们的基础设施指南,由于它们位于不同的模块中,我们不能进行导入操作。
实际上,即使 A 和 B 都在同一模块中,ControllerB 中对 ViewModelA 的引用也不够优雅。
用法
Agnes 让您的_viewModels_在不同模块或组件之间交互,就像在 MVVM 中的正常绑定一样。
所以,在您的 _ViewModelA_ 中,您只需使用一个常见的键调用 donate
方法来保持当前的 signal
,然后其他人可以 onNext
或对其进行一些操作以 bindTo
。
extension String : Unicorn
{
}
class ViewModel : NSObject {
let input: PublishRelay<String> = PublishRelay()
let output: PublishRelay<String> = PublishRelay()
override init() {
super.init()
input.donate(key: key, to: agnes).bind(to: output)
}
}
在 PublishRelay 中的所有泛型类型 T 都应实现
Unicorn
,这是 Agnes 的信念~。
然后我们可以调用其他控制器中 ViewModelA 的 input
。
class SecondViewController: UIViewController {
let disposeBag = DisposeBag()
let secondPusher: PublishRelay<String> = PublishRelay<String>()
@IBOutlet weak var secondButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
secondButton.rx.tap.map { "Unicorn comes!" }.bind(to: secondPusher).disposed(by: disposeBag)
secondPusher.bind(to: agnes.unicorn(key: key)).disposed(by: disposeBag)
// Do any additional setup after loading the view.
}
}
示例
运行示例项目,首先克隆仓库,然后从示例目录运行pod install
。
需求
- Xcode 9.0 +
- Swift 4.0 +
安装
AgnesUnicorn 可通过 CocoaPods 获取。安装它,只需将以下行添加到 Podfile 即可
pod 'AgnesUnicorn'
作者
[email protected],[email protected]
许可证
AgnesUnicorn 遵循 MIT 许可证。更多详情请查看 LICENSE 文件。