iyOmSd/Title: RxSwift 12

[RxSwift] RxDataSource TableView Cell타입별 그리기

하나의 TableView안에 위처럼 다양한 CellType을 적용해야할 때가 존재해요 그럴때 RxDataSource를 이용해서는 어떻게 처리하나~ 에대해서 한번 알아보겠습니다 먼저 CellModel을 만들어볼거에요 // MARK: - Cell Model struct TestSection { var items: [Item] } enum TestItem { case aCell(ACellModel) case bCell(BCellModel) case none } extension TestSection: SectionModelType { typealias Item = TestItem init(original: TestSection, items: [Item] = []) { self = original self.it..

[RxSwift] Filtering Operators

ignoreElement() 모든 next이벤트를 무시함 하지만 completed error같은 중지이벤트는 허용함 example(of: "ignoreElements") { let strikes = PublishSubject() let disposeBag = DisposeBag() strikes .ignoreElements() .subscribe { _ in print("You're out!") } .disposed(by: disposeBag) strikes.onNext("X") strikes.onNext("X") strikes.onNext("X") strikes.onCompleted() } --- Example of: ignoreElements --- You're out! element(at:) 해당 ..

[RxSwift] ReactorKit 체험 (Hello ReactorKit)

Rx를 사용하면서 MVVM을 쓰게되는데 Observable변수가 많아지게되면 상태를 나타내는 변수와 행동을 나타내는 변수의 구분이 잘 안가서 헷갈리고 의도를 파악하기 어려워서 쓰이는곳을 타고타고 찾아가서 직접 확인해야하는 경우가 생기죠 관리가 쉽지않다는것을 느꼈어요 이 문제점을 ReactorKit이 잡아주고 깔끔해진다고 해서 한번 써보려고 합니다! 간단하게 개념부터 읽고 가려해요 아키텍쳐의 모습이에요 View 뷰컨트롤러 셀도 View에 포함 View레이어에는 비지니스 로직이없고 입력을 action스트림에 바인딩하고 뷰의 state를 각 UI컴포넌트에 바인딩하는 역할 Reactor(ViewModel) 뷰의 상태를 관리하고 UI와는 독립된 계층 모든 뷰는 각각 1:1대응되는 reactor를 가지고 있음 뷰에..

[RxSwift] Observable? Driver? Relay? 알아보기

Rx를 사용하다보면 타입이 다양한데 기능이 비슷하기때문에 헷갈리기때문에 확실히 알고 사용할 필요가있어요 다른 게시글에서 Observable, Subject, Relay는 다뤘으니 간단하게만 말씀드리고 넘어갈게요! 2020/06/27 - [iyOmSd/Title: RxSwift] - [RxSwift] Observable, Subject, Relay [RxSwift] Observable, Subject, Relay Subject란 Observable에 값을 추가하고 방출할 수 있도록해주는 기능이에요 즉, Observable(방출자)이자 Observer(구독자)의 역할을 모두할 수 있다고 생각하면되요 Cold Observable을 Hot하게 만들어 줄 수 있다 nsios.tistory.com Observabl..

[RxSwift] bind, subscribe, drive

Rx를 사용하다보면 헷갈리는 용어들과 언제 사용해야 맞는 건지 등등 사용법은 비슷한데 다른 API들이 있어요 우선 사용하면서 느낀게 bind, subscribe, drive가 있었어요 각 개념들을 정리해보고 생각해 볼까요? 제일 기본적인 subscribe 되게길죠..? ㅎ... 대부분 구독한다라는 뜻으로 알고 사용해요 한 대상이 있고 subscribe를 하면 그 대상의 상태가 변하면 그 값을 받아 와서 처리할 수 있는 개념이에요 구독대상의 변하는 다음값, 에러시, 끝날시의 때를 알고 코드를 구현 할 수 있죠 다음은 bind 내부적으로는 subscribe를 사용하고 있네요 onNext만 매개변수로 받아서 사용하구요 따라서 subscribe에서 error컨트롤을 못 할 것 같죠?? 단순히 새로 생성되는 값을..

[RxSwift] Observable, Subject, Relay

Subject란 Observable에 값을 추가하고 방출할 수 있도록해주는 기능이에요 즉, Observable(방출자)이자 Observer(구독자)의 역할을 모두할 수 있다고 생각하면되요 Cold Observable을 Hot하게 만들어 줄 수 있다고 해요 Hot Observable 생성과 동시에 이벤트를 방출 처음생성된 이벤트 부터 받지못하고 중간부터 나온 이벤트부터 구독가능 여러 Observer가 하나의 Observable을 공유 가능 publish, replay ... 등 Subject타입 (이벤트 방출시작) 1 2 3 4 (구독시작) 5 6 7 이런식으로 스트림이 존재하고 구독시작시 1 2 3 4의 이벤트는 받지 못하는거에요 Cold Observable 구독되는 시점부터 이벤트를 방출 처음부터 방출..

[RxSwift] TableView 구현하기

RxSwift를 이용해서 TableView 혹은 CollectionView를 구현하는 방법에는 여러가지가 있지만 제가 자주사용하는 방법을 정리해봤어요 2가지의 방법이있어요 reuseIdentifier을 미리 입력해서 코드를 간결하게 하는방법 reuseIdentifier을 구분해서 cell을 구현하는 방법 아래는 하나의 reuseIdentifier만 쓸 때의 코드에요 같은 cell을 쓰기 때문에 미리 넣어주고 내부코드는 간결해져요 bind(to: tableView.rx.item(cellIdentifier: )){ (indexPath, cellViewModel(cell의 모델), cell(셀) } 여기서 cell의 모델은 boardList를 사용했으니까 그 타입의 모델이 반환돼요 viewModel .boar..

[RxSwift] Combine Operator정리 - CombineLatest, Merge, Zip

Rx를 이용해서 개발하면서 Combine할때 유용한 Operator를 소개할게요 제 주관적으로 자주쓰이는것을 골라봤어요 Combine Operator는 말그대로 서로다른 스트림을 하나의 스트림으로 합쳐서 사용할 때 유용하게 쓰일거에요 CombineLatest 최초 두개의 스트림에서 각각 하나씩 이벤트를 받아온 뒤부터 두개의 스트림중 한쪽에서만 이벤트가 발생해도 새로운 스트림에 이벤트를 받아올 수 있음 그림이 이해가시나요? 처음보면 어려울수도있어요 숫자스트림과 알파벳스트림 이렇게 2개의 스트림이 존재하구요 숫자스트림은 1, 2, 3, 5 이벤트를 알파벳스트림은 A, B, C, D이벤트를 발생하죠? 처음에는 두스트림에 모든 이벤트가 있어야 새로운 스트림에 이벤트가 들어와요 1과 A가 차례대로들어오면 그때 새..

[RxSwift] RxDataSources을 이용한 TableView구현하기

지금 까지 기본적인 입출력만 binding 하는것을 해봤어요 약간 더 어려운 Rx를 이용한 TableView를 구현해 볼거에요 앞의 내용을 하면서 Rx를 조금이라도 이해 했다면 그리 많이 어렵지 않을 거에여!! 우선 Pod을 추가해주세요 많은 레퍼런스를 보면 이런 방식은 똑같이 하더라구요 그래서 저도 똑같이 했어요 Cell에 들어갈 데이터 타입을 정해야겠죠? AnimatableSectionModelType 이건 음... 잘모르겠지만 SectionModel로 사용하기위해서 상속받아 사용하는 거같아요... 상속을 받으면 Identity과 Item를 정의하는게 나올거에요!! Item은 테이블안에 들어갈 데이터의 타입으로 하고 identity는 연산 프로퍼티로 바꿨어요 MySection타입 객체 하나가 섹션 하..

[RxSwfit 기초] 원의 이동에따른 색변화 시키기

안녕하세요 😄😄 이번에도 PilGwonKim님의 예제를 참조해서 만든 내용이에요!! RxSwift에 대한 예제가 찾아보니까 많이 없더라구요 이 분의 글을 보면서 조금씩 공부해가고 있어요 PilGwonKim님은 chameleon라이브러리를 사용해서 만들었는데 좀예전 게시물이라서 Swift3.0버전으로 만들어졌고 그라이브러리도 3버전만 지원하더라구요 그래도 이라이브러리르 사용하겠다하시면 사용하셔도되요!! 저는 색바꾸는 작업을 직접 해보려고해요 아 우선 기능을 설명 안드렸네요!! 간단한 예제로 짧막하게 연습하기때문에 제목에 보이는게 다에요 기능 ▶원생성 ▶원위치에 따른 뷰의 색지정 딱 2가지에요 디자인을 먼저 해볼게요~ func setUp() { // 원 모양의 뷰를 그립니다 circleView = UIVie..