본문 바로가기
반응형

iOS/RxSwift19

[RxCocoa] 델레게이트와 Rx의 중첩으로 인한 셀 클릭 인지 안되는현상 서론UITableView나 UICollectionView와 같은 컴포넌트를 RxCocoa로 바인딩하여 사용하다 보면, 셀을 클릭했을 때 이벤트가 트리거되지 않는 경우가 있습니다. 예를 들어, tableView.rx.itemSelected를 사용하여 셀 클릭 이벤트를 처리하려고 할 때, 특정 상황에서 이 이벤트가 호출되지 않는 현상이 발생할 수 있습니다. 특히, UITableView의 델리게이트 메서드를 직접 구현하면서 Rx와 중복으로 설정하게 되면 이러한 문제가 발생할 가능성이 높아집니다.원인 RxCocoa는 내부적으로 UITableView의 델리게이트를 설정하여 각종 이벤트를 Rx 스트림으로 제공하는데, 개발자가 직접 델리게이트를 설정하게 되면 Rx가 설정한 델리게이트가 무효화되면서 예상치 못한 동작이.. 2024. 11. 12.
[RxSwift] withUnretained 를 대체하는 subscribe(with:onNext:) withUnretained란RxSwift 6부터 나온 기능으로, Observable 시퀀스에서 방출되는 요소들과 함께 특정 객체를 약한 참조로 묶어(unretained), 메모리 누수(Memory Leak)를 방지하는 데 사용합니다* 이렇게 적으니 먼가 애매하죠? RxSwift공식 깃헙에 적힌 내용입니다만, 코드로 보는게 더 이해가 빠를 것 같네요  info .subscribe(onNext: { [weak self] in /// ~내용~~ }) .disposed(by: disposeBag)클로저 내부의 self는 강한 참조로 캡처되며, disposeBag도 self에 의해 유지되므로 강한 참조 순환이 발.. 2024. 10. 28.
[RxSwift] Single + Extension을 통해 로깅 시스템 구현 네트워크 응답의 Raw JSON 데이터를 로깅을 할때, 함수를 통해서 네트워크 요청 클래스에서 진행을 하는데 문뜩 Single로 네트워크 통신을 주로(사실은 다) 처리하니까. Single에 Extension으로 추가해서 조금 더 보기 좋게 할 수 있지 않을까? 해서 해보았습니다.Single Extension 구현import RxSwiftextension PrimitiveSequence where Trait == SingleTrait, Element: DataResponse { /// Raw JSON을 로깅하는 확장 메서드 /// - Parameter tag: 로그 태그 /// - Returns: 로깅이 적용된 Single func logRawJSON(tag: String = "Raw.. 2024. 10. 20.
[RxSwift] PrimitiveSequenceType PrimitiveSequenceType이란?PrimitiveSequenceType은 RxSwift에서 제공하는 프로토콜로, 기본적인 시퀀스 타입을 정의합니다. 단일한 요소 또는 이벤트를 처리하는 시퀀스로, Single, Maybe, Completable 세 가지 타입이 있습니다. PrimitiveSequenceType의 종류와 사용 방법1. SingleSingle은 하나의 요소 또는 에러를 방출하고 종료되는 시퀀스입니다. 주로 네트워크 요청이나 데이터베이스 조회 등 한 번의 결과를 필요로 하는 작업에 사용됩니다.성공 이벤트: 단일 요소를 방출하고 완료실패 이벤트: 에러 방출예제 코드:func fetchUserProfile(userID: String) -> Single { return Single.c.. 2024. 9. 30.
[RxSwift] Merge와 concat RxSwift의 Merge와 ConcatObservable을 합치는 경우 Merge와 Conact를 사용하는데, 사용하면서도 2개의 연산자에 대한 확실한 차이와 어떤경우에 써야하는지를 정확히 파악하고 있지 못한것 같아, Merge와 Conact를 알아보기로 했습니다 ㅎ.ㅎMerge 연산자merge 연산자는 여러 Observable을 동시에 구독하여 각 Observable에서 방출되는 이벤트를 순서와 상관없이 전달합니다. 즉, 모든 Observable에서 발생하는 이벤트를 병합하여 하나의 Observable로 만들어줍니다.예제 코드:let observable1 = Observable.of(1, 3, 5)let observable2 = Observable.of(2, 4, 6)Observable.merge(o.. 2024. 9. 19.
[RxSwift] 재사용으로 인해, 테이블뷰 셀안에 버튼이 반응하지 않을때 private func setupActions() { agreeBtn.rx.tap .bind(to: agreeButtonTapped) .disposed(by: disposeBag) goBtn.rx.tap .bind(to: goButtonTapped) .disposed(by: disposeBag) } override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) [agre.. 2024. 7. 10.
반응형