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("收到通知")
}