[RxSwift] Zip

[RxSwift] Zip

역할

두 개 이상의 Observable에서 방출된 순서가 같은 아이템을 묶어서 하나의 아이템으로 방출합니다.

예제

[코드]

let disposeBag = DisposeBag()
    
let numSubject = PublishSubject<Int>()
let charSubject = PublishSubject<String>()
    
let zippedObservable = Observable.zip(numSubject, charSubject)
    
zippedObservable
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
    
numSubject.onNext(1)
charSubject.onNext("A")
numSubject.onNext(2)
charSubject.onNext("B")
charSubject.onNext("C")
charSubject.onNext("D")
numSubject.onNext(3)
numSubject.onNext(4)
numSubject.onNext(5)

[실행 결과]

(1, "A")
(2, "B")
(3, "C")
(4, "D")

numSubject의 아이템 5에 대해서는 charSubject에서 같은 순서에 방출된 아이템이 없으므로 zip 결과로 아무런 아이템도 방출되지 않습니다.

활용

같은 순서쌍으로 처리해야하는 작업에 사용하면 편리 합니다.

예를들면, UITableView에서 선택한 Cell의 indexPath와 그 indexPath에 해당하는 model을 보장하는 처리를 하고 싶을때 zip을 사용할 수 있습니다.

첫번째 Observable: UITableView에서 선택된 아이템의 indexPath

두번째 Observable: UITableView에서 선택된 아이템의 model

[코드]

Observable.zip(tableView.rx.itemSelected, tableView.rx.modelSelected(ServiceType.self))
.subscribe(onNext: { [weak self] (indexPath, serviceType) in
    self?.tableView.deselectRow(at: indexPath, animated: false)
    self?.selectedServiceType.accept(serviceType)
})
.disposed(by: disposeBag)

indexPath을 이용해 선택된 Cell을 deselect하고, model은 선택된 Cell의 모델을 관리하기 위해 사용합니다.

[참 고]

Read more

카카오모빌리티 5년, 그 경험과 생각

2018년부터 2024년까지 5년 동안 카카오모빌리티에서 개발자로 일하며 얻은 경험과 느낀 점을 정리해 보았습니다. 개인적인 관점에서 작성된 내용이며, 제 경험이 회사 전체를 대표하지는 않습니다. 일 * 리더의 변화가 회사 분위기를 바꾼다. * 재직 중 CEO가 한 번 교체되었고, 그 후 CTO를 비롯한 여러 리더들이 함께 교체되었습니다. * 리더가 바뀌니 마치 다른 회사에 다니는 것처럼

By 토미
복잡한 마음이 든다면 적어보세요.

복잡한 마음이 든다면 적어보세요.

살다보면 분노, 불안, 우울 등 부정적인 감정이 찾아옵니다. 이런 감정은 시간이 지나면 금새 사라지기도 하지만, 때로는 계속 불쑥 불쑥 올라와서 마음을 혼란에 빠뜨립니다. 이럴 땐 한번 적어보세요. 내 마음은  왜 화가 났는지, 왜 불안한지, 왜 우울한지, 적다보면 부정정인 감정의 근본 원인이 무엇인지 그 감정을 어떻게 정리해야 할지 실마리를 찾을 수

By 토미
인생이란 책

인생이란 책

사람은 누구나 인생이란 책의 저자입니다.  모든 사람은 단 한 권의 책을 쓰고, 모든 책의 주인공은 저자 자신입니다.  1년의 삶을 한 페이지에 적는다고 했을 때, 책은 보통 80페이지 정도 되고, 많아도 120페이지를 넘기진 않습니다.  책에 한 번 써진 내용은 수정하거나 삭제할 수 없습니다. 마음에 들지 않는 페이지가 있더라도 찢어버릴 수 없습니다.

By 토미
박경리 - 산다는 것

박경리 - 산다는 것

체하면 바늘로 손톱 밑 찔러서 피 내고 감기들면 바쁜듯이 뜰 안을 왔다갔다 상처나면 소독하고 밴드하나 붙이고 정말 병원에는 가기 싫었다 약도 죽어라 안 먹었다 인명재천 나를 달래는 데 그보다 더 생광스런 말이 또 있을까 팔십이 가까워지고 어느 날부터 아침마다 나는 혈압약을 꼬박꼬박 먹게 되었다 어쩐지 민망하고 부끄러웠다 허리를 다쳐서 입원했을

By 토미


[책] 토미의 Git with 소스트리

Git을 제대로 알고 싶으신 분들께 추천드립니다.



[온라인 강의] 토미의 Git & Github

Git을 제대로 알고 싶으신 분들께 추천드립니다.