iyOmSd/Title: RxSwift

[RxSwift] TableView 구현하기

냄수 2020. 6. 5. 12:31
반응형

RxSwift를 이용해서 TableView 혹은 CollectionView를 구현하는 방법에는 여러가지가 있지만

제가 자주사용하는 방법을 정리해봤어요

 

 

2가지의 방법이있어요

 

reuseIdentifier을 미리 입력해서 코드를 간결하게 하는방법

reuseIdentifier을 구분해서 cell을 구현하는 방법

 

 

아래는 하나의 reuseIdentifier만 쓸 때의 코드에요

같은 cell을 쓰기 때문에 미리 넣어주고 내부코드는 간결해져요

bind(to: tableView.rx.item(cellIdentifier: )){ (indexPath, cellViewModel(cell의 모델), cell(셀) }

여기서 cell의 모델은 boardList를 사용했으니까 그 타입의 모델이 반환돼요

viewModel
    .boardList
    .bind(to: boardTableView
        .rx
        .items(cellIdentifier: BoardListTableViewCell.reuseIdentifier)) { (indexPath, cellViewModel, cell)  in
            guard let cell = cell as? BoardListTableViewCell else {
                return
            }
            cell.bind(model: cellViewModel)
}
.disposed(by: disposeBag)

 

 

 

두개 이상의 다른cell을 쓰고싶을 땐 어떻게하냐,,?

bind(to: tableView.rx.items){ (tableView, row, item }

을 사용해서 

원하는 cell을 만들어주고 return 시켜주면돼요

 

분기처리는 구현에 알맞게 바꿔주시면 돼요

viewModel
    .cityList
    .observeOn(MainScheduler.instance)
    .bind(to: cityTableView.rx.items) { (tableView, row, item) -> UITableViewCell in
                
        if viewModel.type.value == "첫번째" {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: Cell1.reuseIdentifier, for: IndexPath(row: row, section: 0)) as? Cell1 else {
                return .init(style: .default, reuseIdentifier: "")
            }
            cell.bind(model: item)
            return cell
        } else {
            guard let cell = tableView.dequeueReusableCell(withIdentifier: Cell2.reuseIdentifier, for: IndexPath(row: row, section: 0)) as? Cell2 else {
                return .init(style: .default, reuseIdentifier: "")
            }
            cell.bind(model: item)
            return cell
        }
}
.disposed(by: disposeBag)

 

 

 

반응형