RxSwift应用登录验证
文章目录
【注意】最后更新于 October 4, 2018,文中内容可能已过时,请谨慎使用。
{% github it-boyer SimpleValidation fb7a58b width = 30% %}
{% meting “0036mZ7Q1pk7st” “tencent” “song” %}
使用RxSwift的优点
RxSwift的目的是让让数据/事件流和异步任务能够更方便的序列化处理,能够使用swift进行响应式编程
这是一个模拟用户登录的程序。
功能点
- 当用户输入用户名时,如果用户名不足 5 个字就给出红色提示语,并且无法输入密码,当用户名符合要求时才可以输入密码。
- 同样的当用户输入的密码不到 5 个字时也给出红色提示语。
- 当用户名和密码有一个不符合要求时底部的绿色按钮不可点击,只有当用户名和密码同时有效时按钮才可点击。
- 当点击绿色按钮后弹出一个提示框,这个提示框只是用来做演示而已。
share(replay: 1)
是用来做什么的?
我们用 usernameValid
来控制用户名提示语是否隐藏以及密码输入框是否可用。shareReplay 就是让他们共享这一个源,而不是为他们单独创建新的源。这样可以减少不必要的开支。
第一个观察者passwordOutlet.rx_enabled
订阅usernameValid
时,调用map
里的print
函数,第二个观察者在订阅时(没有添加.shareReplay(1)
)时,又再次调用map
里的print
函数,以此类推,如果有很多观察者的话就要调用很多次,而从第二个观察者开始需要的只是map
返回的一个序列,而不是让其徒劳地调用map
里的函数,那么怎样解决在多个观察者订阅时多次重复调用执行的问题?
使用shareReplay(bufferSize: Int)
就ok了。
shareReplay
会返回一个新的事件序列,它监听底层序列(这里指的是map返回的序列)的事件,并且通知自己的订阅者们。不过和传统的订阅不同的是,它是通过『重播』的方式通知自己的订阅者,因此在这里通过shareReplay
订阅的map
并不会调用多次。
// 参数bufferSize指的是重播的最大元素个数,因为usernameValid是一个只有一个元素的序列observable,因此shareReplay参数为1;假如对于一个有5个元素的序列,你只需要重复播报最后3个,那么就写成.shareReplay(3),就酱紫。
disposed(by: disposeBag)
是用来做什么的?
和我们所熟悉的对象一样,每一个绑定也是有生命周期的。并且这个绑定是可以被清除的。disposed(by: disposeBag)
就是将绑定的生命周期交给 disposeBag
来管理。当 disposeBag
被释放的时候,那么里面尚未清除的绑定也就被清除了。这就相当于是在用 ARC
来管理绑定的生命周期。 这个内容会在 Disposable 章节详细介绍。
bindTO 简单使用
我的理解就是将已经信号源去用一个UIBindingObserver
去接受,当接收到的属性是true
进行相应的操作
为登录按钮写一个rx_click的拓展
|
|
文章作者 iTBoyer
上次更新 2018-10-04