본문 바로가기

Swift/RxSwift

(20)
[RxSwift] Rx+MVVM으로 로그인 화면을 만들어보자. Rx+MVVM 예제를 살펴보면 주로 검색에 대한 테이블 뷰 화면, 또는 로그인 화면이 많은 것을 알 수 있는데, 실시간으로 반응해서 대응하는 화면이 Rx의 가장 큰 장점(반응형)을 돋보이게 할 수 있어서 그런 것 같다. 그러니까 한번 가보자고 ~ 먼저 화면부터 살펴보면 아래와 같다. 이렇게 위와 같이 이메일을 입력할 수 있는 텍스트필드와, 비밀번호를 입력할 수 있는 텍스트 필드 2개, 그리고 로그인 버튼으로 구성되어 있다. 🌱 MVVM 먼저 프로젝트 구성을 살펴보면 다음과 같다. MVVM 패턴이므로 Model-View-ViewModel의 구조로 구성되어 있다. #Model Model에는 위와 같이 로그인 화면에서 필요한 데이터 모델을 만들어준다. 이 때 우리는 크게 두가지 모델이 필요하다. ✅ 바로 로그..
[🌱SeSAC] Observable VS Subject, Drive & Relay 오늘 글은 .. 기승전결이 있기 때문에 .. 차근차근 .. 따라가보자 .. ! 로그인 화면을 만들어보자. 이렇게 이름을 입력하는 텍스트 필드와, 텍스트 필드에 입력하는 값에 따라서 유효성 검사를 하는 경고 레이블, 그리고 버튼으로 UI를 만들 수 있다. 이 때의 로직은, 텍스트 필드에 8글자 이상 입력해야 경고 레이블이 사라지고 버튼이 활성화 되는 것이다. 그렇다면 우리는 아래와 같이 코드를 입력할 수 있다. nameTextField.rx.text // String? .orEmpty // String .map { $0.count >= 8 } // Bool .bind(to: stepButton.rx.isEnabled, validationLabel.rx.isHidden) .disposed(by: dispos..
[🌱SeSAC] Observable/Observer, Subject, Relay Observable & Observer 데이터를 변경해줄 수 있는 이벤트가 있고, 이 이벤트에 따라서 변경되는 뷰, 로직이 있다. 즉, 이벤트를 방출할 수 있는 Observable이 있고, 이벤트를 처리하는 Observer가 있다. Observable과 Observer를 통해 데이터의 흐름(= Stream)을 통제할 수 있고 Operator를 통해 Stream을 변경, 조작할 수 있다. 사용자에게 텍스트 필드로 입력값을 받아서, 해당 입력값을 닉네임을 지정한다고 할 때, 그림으로 표현하면 아래와 같다. 그리고 코드로 구현하면 아래와 같이 작성할 수 있다. simpleTextField.rx.text .orEmpty .withUnretained(self) .bind { vc, value in vc.nickn..
[🔥Rx뿌셔] Subject VS Observable Subject VS Observable Subject는 Observable과 Observer의 역할을 모두 할 수 있는 Observable이라고 생각하면 된다. Observable이나 Subject모두 이벤트를 emit하므로 subscribe 할 수 있다. 다만, subscribe에서 차이가 발생하는데, Subject는 multicast 방식이므로 여러 개의 Observer를 subscribe할 수 있다. 단순 Observable은 unicast 방식이므로 observer 하나만을 subscribe할 수 있다. Observable - unicast let observableInt = Observable.create { observer in observer.onNext(Int.random(in: 1...1..
[🌱SeSAC] Disposable, Observable, Subject Disposable Disposable은 subscribe 중인(= 구독중인) stream을 원하는 시기에 처리할 수 있도록 도와준다. 모든 Observable은 Disposable을 반환한다. 이를 통해서 stream을 종료하고 실행되고 있던 시퀀스를 모두 종료한다. Observable의 next 이벤트 emit이 끝나면, (= 모든 이벤트가 방출되면) completed에서 disposed로 시퀀스가 정상적으로 종료된다. 하지만, interval 코드 등과 같이 별다른 조건 없이 무한하게 emit 될 수 있는 상황에서는 disposed 되지 않는다. 클래스의 메모리가 해제되는 시점, 즉 deinit이 되는 시점에서 disposable이 되지만, 만약 (루트 뷰가 변하지 않는 상황에서의) RootView..
[🔥Rx뿌셔] Disposable dispose .. disposeBag .. 뭣이 중헌디 .. Observable을 구독할 때 필수로 사용해야 하는 dispose와 disposeBag에 대해서 알아보자 !!! 왜 알아야 하는데?! 다 피가 되고 .. 살이 된다 .. Rx로 코드를 작성하다 보면, 방출된 이벤트를 처리할 때 dispose를 하지 않을 시 아래 이미지와 같은 경고 메시지가 발생하는 것을 볼 수 있다. 물론 그냥 .. 경고 메시지니까 .. 실행에는 큰 문제가 없을 것이라고 판단하여 넘어갈 수 있지만 .. 그렇지 않다 !!! 경고 메시지를 보게 되면 우리가 어떤 Observable을 .subscribe를 통해 구독하게 되면 해당 Observable은 Disposable을 반환한다. 위의 이미지에서 볼 수 있는 것처럼 subsc..
[🔥Rx뿌셔] Subscribe Observable에서 이벤트를 방출하면 이를 구독하고 있는 Observer가 해당 이벤트에 대한 처리를 한다. 이때 구독을 어떻게 하는가? .. 바로 subscribe 메서드를 통해서 할 수 있다. 🔔 구독 좋아요 알림 설정까지 ~ 가 아니고 .. 구독을 의미하는 메서드가 위에서 말한 것과 같이 바로 subscribe 이다. 어떤 Observable을 subscribe하려고 하면 아래와 같이 Observable이 방출하는 이벤트에 대해서 처리할 수 있도록 함수가 나온다. 그리고 해당 자동 완성된 메서드를 받아오면, 위와 같이 Observable에서 방출한 아이템에 대한 처리를 할 수 있다. 만약 제대로 이벤트가 방출되어 온다면, 첫번째 코드블럭으로 이벤트가 들어가게 되고 이 코드 블럭이 실행된다. 그러..
[🔥Rx뿌셔] Observable Rx의 핵심 개념은 유튜버와 구독자의 관계를 생각하면 된다. 구독자들이 어떠한 Observable이라는 유튜버를 구독하고 유튜버가 영상을 올리면, 즉 이벤트를 방출하면 이를 감지해서 지금 시청하거나 보관함에 넣거나 등의 액션을 취하는 것이다. Observable이란? 사전적인 의미는 관찰 가능한 이라는 의미를 갖고 있다. Observable이 이벤트를 방출하고 구독자가 이 이벤트를 관찰할 수 있다.는 것에서 그 의미를 찾을 수 있다. (시간의 흐름에 따라서 이벤트를 관찰할 수 있다.) Event Type Observable이 방출하는 이벤트에는 크게 네 가지 타입이 존재한다. 이 네가지 타입에 대해 Observable을 구독한 구독자는 이벤트를 전달받고 각 상황에 따라서 액션을 취하게 된다. onNext..