반응형
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)
반응형
'iyOmSd > Title: RxSwift' 카테고리의 다른 글
[RxSwift] bind, subscribe, drive (1) | 2020.10.03 |
---|---|
[RxSwift] Observable, Subject, Relay (0) | 2020.06.27 |
[RxSwift] Combine Operator정리 - CombineLatest, Merge, Zip (0) | 2020.05.30 |
[RxSwift] RxDataSources을 이용한 TableView구현하기 (0) | 2020.01.21 |
[RxSwfit 기초] 원의 이동에따른 색변화 시키기 (0) | 2019.08.12 |