2차 학습 : 21.03.10
📚목차
RxCocoa 로 테이블 뷰 바인딩하기
- [ ] 코드 직접 짜봤어?
- [ ] 안보고 잘 사용할 수 있겠어?
- [ ] 이 방법의 장 단점은 뭘까?
- RxCocoa 를 사용하면 ,기존의 Delegate 과 DataSource 를 사용할 필요가 없다
- 대신 옵저버블을 테이블 뷰에 바인딩한다.
- Delegate 대신 RxCocoa extension 의 옵저버블을 구독하는 방식을 사용한다.
- 그렇기 때문에 옵저버블이 테이블 뷰에 표시할 데이터를 방출해야한다.
- cellForRowAt 대신 rx extension 에 구현된 items 메서드를 사용한다
- 다음은 items 메서드의 구현부분이다. 이 코드를 전부 이해해야 하는 것은 아니다.
- 샘플 코드를 보고 어떻게 사용하면 되는지 이해하면 된다.
public func items<Sequence: Swift.Sequence, Source: ObservableType>
(_ source: Source)
-> (_ cellFactory: @escaping (UITableView, Int, Sequence.Element) -> UITableViewCell)
-> Disposable
where Source.Element == Sequence {
return { cellFactory in
let dataSource = RxTableViewReactiveArrayDataSourceSequenceWrapper<Sequence>(cellFactory: cellFactory)
return self.items(dataSource: dataSource)(source)
}
}
- 클로저가 어떤 파라미터를 전달하는지 잘 알 수 없을 때는 어떻게 할까?
우선 파라미터를 비우고 컴파일 에러 메시지를 살펴본다 ( 파라미터의 개수를 파악할 수 있다)
파라미터 개수만큼 채워넣고, 타입을 본다
더 좋은 방법이 있다면 수정하자... ( RxCocoa 쪽 구현 코드 너무 어렵게 짜여져 있다...)
- 선임분이 말해주신 방법이 있었는데 떠오르지가 않는다.
itemSelected
Control Event 타입
- 셀을 선택할때마다 next 이벤트를 방출한다 제네릭 타입은 IndexPath
RxCocoa 와 Delegate 을 동시에 사용하기