Published: 31 Jan 2018 › Updated: 31 Jan 2018

RxSwift Tableview
셀 타입이 여러가지일 경우 데이터 바인딩
// 셀 타입이 여러가지일 경우에는 ViewModel에서 가공된 CellType(Enum)으로 분기를 하여 처리한다.
self.viewModel.items.asObservable().bind(to: self.tableView.rx.items) { (tableview, row, item) in
switch item {
case .notice(let value):
let cell = self.tableView.dequeueReusableCell(withIdentifier: "NoticeCell") as! NoticeCell
cell.date?.text = self.dateFormat(string: value.creationDate)
cell.title?.text = value.title
return cell
case .exemple(let value):
let cell = self.tableView.dequeueReusableCell(withIdentifier: "ExCell") as! ExCell
cell.title?.text = value
return cell
}
return UITableViewCell()
}.disposed(by: disposeBag)
셀 타입이 유일한 경우의 데이터바인딩
// 셀 타입이 유일한경우 bind(to self.tableview.tx.items(cellIdentifier: "CellName", cellType: CellClass.seld)) { (row, element, cell) in }
self.viewModel.items.asObservable().bind(to: (self.tableView?.rx.items(cellIdentifier: "NoticeCell", cellType: NoticeCell.self))!) { (row, element, cell) in
cell.title?.text = element.title
cell.date?.text = self.dateFormat(string: element.creationDate)
}.disposed(by: disposeBag)
셀타입이 유일한 셀을 선택했을 경우의 로직 바인딩
// 테이블뷰의 셀을 선택했을시의 로직을 바인딩해준다.{ (indexPath) in}
self.tableView.rx.itemSelected.bind { (indexPath) in
let destination = self.storyboard?.instantiateViewController(withIdentifier: "CommonWebViewController") as! CommonWebViewController
destination.urlString = self.viewModel.items.value[indexPath.row].url
self.present(destination, animated: true, completion: nil)
}.disposed(by: disposeBag)
셀타입이 여러가지일 경우 셀을 선택했을 경우의 로직 바인딩
------ 셀타입이 여러가지일 경우는 cellType의 배열을 생성하여 switch case로 분기하여 처리한다.------
// 테이블뷰의 셀을 선택했을시의 로직을 바인딩해준다.
self.tableView.rx.itemSelected.bind { (indexPath) in
let cellType = self.viewModel.items.value[indexPath.row]
switch cellType {
case .notice(let value):
let destination = self.storyboard?.instantiateViewController(withIdentifier: "CommonWebViewController") as! CommonWebViewController
destination.urlString = value.url
self.present(destination, animated: true, completion: nil)
case .exemple(let value):
QL1(value)
}
}.disposed(by: disposeBag)
******마지막에는 꼭 disposed를 체이닝하여 메모리에서 해제하게 해 주어야 한다. *******
TableView(RxSwift) 데이터 바인딩
보통 Row와 Section은 각각 cellType, sectionType이라고 enum타입으로 정의를 한 후 Array를 생성하여 뷰에맞게 append해준다.
Switch / Case 로 분기를 태워서 tableView의 구성을 잡는다.
* 데이터의 가광과 정렬은 해당 view의 viewmodel에서 처리하여 view단에서는 observer만 할 수 있도록 구현한다(단지 view에서는 가공된 데이터를 테이블뷰에 바인딩시키는 역활만 할 뿐이다.)
Rx(viewModel)의 BehaviorRelay는 변수 즉 variable이라고 봐도 무방하다.
Leave RxSwift Tableview to:
Read more #rxswift posts
Best Posts From jinsky
We have not curated any of jinsky's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.