RXSwift常用操作
来源:互联网 发布:网络端口有几根线 编辑:程序博客网 时间:2024/06/05 14:07
1.按钮的点击
testBtn1.rx.tap.subscribe { (event : Event<()>) in
print("按钮1发生了点击")
}.addDisposableTo(bag)
2.监听文本框的输入
textField1.rx.text.subscribe { (event : Event<String?>) in
print(event.element!!)
}.addDisposableTo(bag)
textField1.rx.text.subscribe(onNext: { (str : String?) in
print(str!)
}).addDisposableTo(bag)
3.将textField与lable绑定
textField1.rx.text
.bindTo(testLabel1.rx.text)
.addDisposableTo(bag)
4.监听文本框的改变
testLabel1.rx.observe(String.self, "text")
.subscribe(onNext: { (str : String?) in
print(str)
}).addDisposableTo(bag)
5.监听scrollVIew的偏移
scrollView.rx.contentOffset
.subscribe(onNext: { (point : CGPoint) in
print(point)
}).addDisposableTo(bag)
6.登录界面的逻辑控制
/// 事件监听
func initEventHandle() {
weak var weakSelf = self
let phoneTextFieldValid = phoneTextField.rx.text
.map{_ in
return String.isPhoneNum(phoneNum: (weakSelf?.phoneTextField.text!)!)
}
let pwdFieldValid = pwdTextField.rx.text.map { _ in
return String.isPassWord(pwd: (weakSelf?.pwdTextField.text!)!)
}
// 用户名密码都通过验证,才可以点击按钮
let everythingValid = Observable.combineLatest(phoneTextFieldValid, pwdFieldValid) { (phoneValid, passwordValid) -> Bool in
phoneValid && passwordValid
}.subscribe(onNext: { (isvalid) in
if isvalid==true {
weakSelf?.loginBtn.isEnabled = true
weakSelf?.loginBtn.backgroundColor = UIColor.tangerine
} else {
weakSelf?.loginBtn.isEnabled = false
weakSelf?.loginBtn.backgroundColor = UIColor.lightGray
}
}, onError: nil, onCompleted: nil, onDisposed: nil)
everythingValid.addDisposableTo(disposBag) // 释放
}
7. PublishSubject& ReplaySubject
// 1.PublishSubject, 订阅者只能接受, 订阅之后发出的事件
let publishSub = PublishSubject<String>()
publishSub.onNext("18")
publishSub.subscribe { (event : Event<String>) in
print(event)
}.addDisposableTo(bag)
publishSub.onNext("coderwhy")
print("-------------------------")
// 2.ReplaySubject, 订阅者可以接受订阅之前的事件&订阅之后的事件
let replaySub = ReplaySubject<String>.createUnbounded()
replaySub.onNext("a")
replaySub.onNext("b")
replaySub.onNext("c")
replaySub.subscribe { (event : Event<String>) in
print(event)
}.addDisposableTo(bag)
replaySub.onNext("d”)
结果:
next(coderwhy)
-------------------------
next(a)
next(b)
next(c)
next(d)
8、Variable,下面的例子可以用在网络请求完成刷新ui界面的场景
// Variable
/*
Variable
1> 相当于对BehaviorSubject进行装箱
2> 如果想将Variable当成Obserable, 让订阅者进行订阅时, 需要asObserable转成Obserable
3> 如果Variable打算发出事件, 直接修改对象的value即可
4> 当事件结束时,Variable会自动发出completed事件
*/
let variable = Variable(“a")
variable.value = "b"
variable.asObservable().subscribe { (event : Event<String>) in
print(event)
}.addDisposableTo(bag)
9、Swift中如何使用map
let array = [1, 2, 3, 4]
let array2 = array.map({ $0 * $0 })
print(array2)
//在RxSwift中map函数的使用
Observable.of(1, 2, 3, 4)
.map { (num : Int) -> Int in
return num * num
}
.subscribe { (event : Event<Int>) in
print(event)
}
.addDisposableTo(bag)
10、RXSwift中tableView的使用
heroVM.herosObserable.asObservable()
.bindTo(tableView.rx.items(cellIdentifier: "HeroCellID", cellType: UITableViewCell.self)) { row, hero, cell in
cell.textLabel?.text = hero.name
cell.detailTextLabel?.text = hero.intro
cell.imageView?.image = UIImage(named: hero.icon)
}.addDisposableTo(bag)
tableView.rx.itemSelected.subscribe(onNext: { (indexPath) in
print(indexPath)
}).addDisposableTo(bag)
tableView.rx.modelSelected(Hero.self).subscribe(onNext: { (hero : Hero) in
print(hero.name)
}).addDisposableTo(bag)
11.手势
let tap = UITapGestureRecognizer()
iconView.addGestureRecognizer(tap)
tap.rx.event
.subscribe(onNext: { [weak self] x in
})
.disposed(by: bag)
12.通知
_ = NotificationCenter.default.rx.notification(Notification.Name(rawValue: "message"), object: nil).subscribe { (noti) in
print("收到通知")
}
阅读全文
0 0
- RXSwift常用操作
- RxSwift:操作符
- RxSwift 实战操作【注册登录】
- RxSwift
- RxSwift
- RxSwift
- RxSwift
- RxSwift
- RxSwift
- RxSwift
- RxSwift
- RxSwift(一)
- RxSwift - API
- RxSwift - Why
- 什么是RxSwift?
- RxSwift学习心得
- RxSwift 教程 学习
- RxSwift使用教程
- SPRING的事务传播特性学习整理标记
- python写入mysql乱码
- Android Wi-Fi源码分析之wpa_supplicant初始化(一)
- ios 动画
- mysql数据库更改root密码以及授权用户DML权限
- RXSwift常用操作
- Android箭头图标移动动画实现
- HttpClient 教程 (一)
- android 模拟器INSTALL_FAILED-NO_MATCHING_ABIS:Failed to extract native libraries,res=-113
- Logback浅析
- matlab所见即所得式保存图片
- 开启技术博客之旅
- 交换机接口的access与trunk
- NSValue和NSNumber和NSString