cell dequeue 시점에 cell의 buttonTapSubject를 구독(sink)

sink에서 반환되는 cancellable을 [Int: AnyCacncellable] 타입의 buttonTapCancellableByIndex로 관리

cell의 didEndDisplaying 시점에 buttonTapCancellableByIndex에서 관리되던 해당 인덱스의 셀의 cancellable을 cancel() 해줌

문제

Untitled

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 코드 삭제해서 해결