Dùng thư viện RXSWIFT để cải tiến hiệu suất cho dự án iOS của bạn — phần 5
RxSwift
7
RxCocoa
2
UIKit
1
White

Tuấn Quang Tạ viết ngày 20/08/2021

Dùng thư viện RXSWIFT để cải tiến hiệu suất cho dự án iOS của bạn — phần 5

May 20, 2020 · 2 min read

RxCocoa
Trong phần này mình sẽ giới thiệu về RXCocoa vs Binding

RXCocoa : sử dụng RX đã được viết extension sẵn để tương tác với các UI Controls.Mình sẽ giới thiệu 1 số control hay dùng
UIButton : on click
btn.rx.controlEvent(UIControlEvents.touchUpInside).subscribe { (event) in
print("Btn Clicked")
}
btn.rx.tap.bind { (event) in
print("Btn Clicked")
}
UITextfield : text change
tf.rx.text.asObservable().subscribe(onNext: { (text) in
guard let textGet = text else {
return
}
print("Tf change : (textGet)")
})
UIScrollView : bắt event contentOffset change, didScroll.
scrollView.rx.contentOffset.subscribe(onNext: { (point) in
print("Scroll offset : (point)")
})
scrollView.rx.didScroll.subscribe(onNext: { _ in
print("Did scroll : (self.scrollView.contentOffset)")
})
UISlider : value change
slider.rx.value.asObservable().subscribe(onNext: { (value) in
print("Slider change : (value)")
})
UIGesture
let tap = UITapGestureRecognizer()
self.view.addGestureRecognizer(tap)
tap.rx.event.asObservable().subscribe(onNext: { (tapGestures) in
print("Tap Gesture tap")
})
NotificationCenter
NotificationCenter.default.rx.notification(Notification.Name.UIApplicationDidEnterBackground, object: nil).subscribe(onNext: { (noti) in
print("App enter background")
})
Method : đợi trigger các method sẽ phát ra
//Ví dụ trong UIViewController đợi viewDidAppear
self.rx.methodInvoked(#selector(self.viewDidAppear(:))).subscribe(onNext: { (event) in
print("View did Appear")
})
2.Binding : nhận các obserser có value và đổ vào control như tableview, collectionview
TableView
// Tạo 1 model
struct ModelDetail {
var title:String = ""
}
// Register cell
self.table.register(UINib(nibName: "MyCell", bundle: nil), forCellReuseIdentifier: "MyCell")
// Tạo data source
let items = Observable.of([
ModelDetail(title:"Item1"),
ModelDetail(title:"Item2"),
ModelDetail(title:"Item3"),
ModelDetail(title:"Item4")])
// Binding
items.bind(to: self.table.rx.items(cellIdentifier: "MyCell", cellType: MyCell.self)){ (index,model,cell) in
cell.lbl.text = model.title
}.disposed(by: dispose)
Table selected indexPath
// Did Selected Indexpath
self.table.rx.itemSelected.asObservable().subscribe(onNext: { (indexPath) in
print("Row Selected :(indexPath.row)")
})
.disposed(by: dispose)
CollectionView : cũng giống như tableView
// Binding
items.bind(to: collectionView.rx.items) { (collectionView, row, element) in
let indexPath = IndexPath(row: row, section: 0)
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath) as! MyCell
cell.lbl?.text = element.title
return cell
}
.disposed(by: dispose)
// Selected IndexPath
self.collectionView.rx.itemSelected.subscribe(onNext: { (indexPath) in
print("CollectionView Row Selected :(indexPath.row)")
})
.disposed(by: dispose)
Bạn cũng có thể custom delegate, dùng song song với rx
// set delegate
table.rx.setDelegate(self).disposed(by: dispose)
collectionView.rx.setDelegate(self).disposed(by: dispose)
// implement delegate
extension ViewController : UITableViewDelegate {
func tableView(
tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

}
}
extension ViewController : UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
}
}
Bạn có thể thấy dùng rxswift giúp cho chúng ta viết code rất ngắn gọn. Amazing :D. Hãy follow để nhận được những bài viết mới nhất nhé.
Nguồn: https://medium.com/@VincentVuVNG/d%C3%B9ng-th%C6%B0-vi%E1%BB%87n-rxswift-%C4%91%E1%BB%83-c%E1%BA%A3i-ti%E1%BA%BFn-hi%E1%BB%87u-su%E1%BA%A5t-cho-d%E1%BB%B1-%C3%A1n-ios-c%E1%BB%A7a-b%E1%BA%A1n-ph%E1%BA%A7n-5-56470ce79e57

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Tuấn Quang Tạ

6 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Bài viết liên quan
Male avatar
0 0
RxSwift Take note về RxSwift] Các lưu ý dễ mắc phải (phần 1) 1. Vấn đề về liên quan đến hot/ cold Observables: Khi mới nghiên cứu về HotCold Obse...
Bùi Khánh Duy viết hơn 3 năm trước
0 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
6 bài viết.
0 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!