cell dequeue 시점에 cell의 buttonTapSubject
를 구독(sink
)
sink에서 반환되는 cancellable을 [Int: AnyCacncellable]
타입의 buttonTapCancellableByIndex
로 관리
cell의 didEndDisplaying 시점에 buttonTapCancellableByIndex
에서 관리되던 해당 인덱스의 셀의 cancellable을 cancel()
해줌
1번 셀 선택하고 선택 해제 후 다른 셀 갔다가 다시 1번 셀에 오면 다시 선택된 상태로 보임
Button의 isSelected 속성을 업데이트하고 MultiOptionCardButtonView.updateAllViews(with: cardInfos)
로 뷰를 업데이트 할 때
dataSource를 다시 apply 하는 과정에서 본래 의도한 바와 달리 cell이 사라지지 않았음에도 didEndDisplaying
되는 것을 확인.
dataSource를 새로 apply 하면서 셀이 사라지고 다시 나타나는 것 같다. 그래서 cancellable도 cancel되어 이후 이벤트가 전달되지 않으면서 isSelected가 업데이트 되지 못한 것
didEndDisplaying
시점에 직접 cancel()
해주지 않더라도
cell dequeue 시점에 buttonTapCancellableByIndex[indexPath.row]
를 업데이트하면서
이전에 존재하던 해당 인덱스의 cancellable에 대한 참조가 사라지며 자동으로 구독이 사라짐
→ didEndDisplaying
코드 삭제해서 해결